Вы начинаете наоборот.Вы пишете файл .proto, который определяет (на языке схемы Google protobuf) «сообщения», которые вы хотите определить.Одним из них может быть «oneof», содержащий множество других.Затем вы компилируете этот файл .proto с использованием компилятора Protocol Buffers и в итоге получите исходный код C ++, который реализует эти сообщения как классы C ++, полученные из библиотеки базовых классов.Эти классы имеют встроенные подпрограммы сериализации. Ни в коем случае вы не используете Boost или написанные от руки классы C ++.
Boost :: Вариант вполне может быть эквивалентом 'oneof' протобуфа, но вы не будете использовать его для хранения различных сообщений protobuf, потому что это то, что 'oneof' делает для вас.Смешение Boost :: варианта с собственным стилем работы GPB, вероятно, требует запутанного кода.