Как работают boost :: variant и boost :: any?

Как вариант и любой из библиотеки boost работают внутри? В проекте, над которым я работаю, я использую объединение с тегами. Я хочу использовать что-то еще, потому что объединения в C ++ не позволяют использовать объекты с конструкторами, деструкторами или перегруженными операторами присваивания.

Я запросил размер any и variant, и провел с ними несколько экспериментов. На моей платформе option принимает размер своего самого длинного типа плюс 8 байтов: я думаю, что это всего лишь 8 байтов информации о типе, а остальное - это сохраненное значение. С другой стороны, any занимает всего 8 байт. Поскольку я использую 64-битную платформу, я полагаю, что любой из них просто содержит указатель.

Как кто-нибудь узнает, какой тип он содержит? Как Variant достигает своих целей с помощью шаблонов? Я хотел бы больше узнать об этих классах перед их использованием.

65
задан timrau 1 October 2012 в 16:15
поделиться