ОК, поэтому у меня есть маленький кусочек моего кода, где я бы хотел, чтобы моя функция возвращала любое из значений (int
, double
, CString
), чтобы немного очистить код.
Итак, я думаю: нет проблем, чтобы написать небольшую обертку в виде объединения struct
с тремя членами и т. Д. Но подождите! Разве я не читал о boost::variant
? Разве это не то, что мне нужно? Это избавило бы меня от необходимости возиться со структурой оболочки! (Обратите внимание, что у меня уже есть библиотека повышения, доступная в моем проекте.)
Итак, я запускаю свой браузер, перехожу к Глава 28. Boost.Variant и о чудо:
Шаблон варианта класса представляет собой безопасный, общий, основанный на стеке контейнер различаемого объединения, предлагающий простое решение для манипулирования объектом из разнородного набора типов [...]
Отлично! Именно то, что мне нужно!
Но тогда это продолжается:
Boost.Variant vs. Boost.Any
- Boost.Any мало использует методы метапрограммирования шаблонов (избегая потенциально трудно читаемых сообщений об ошибках и значительных требований процессора и памяти во время компиляции).
[...]
Поиск и устранение неисправностей
«Достигнут внутренний предел кучи» - Microsoft Visual C ++ - Параметр компилятора / ZmNNN может увеличить предел выделения памяти. NNN представляет собой процент масштабирования (то есть 100 обозначает предел по умолчанию). (Попробуйте /Zm200.)
[...]
Э-э-э. Так что использование boost :: variable может значительно увеличить время компиляции и генерировать трудно читаемые сообщения об ошибках. Что, если кто-то переместит мое использование boost :: variable в общий заголовок, внезапно компиляция нашего проекта займет намного больше времени? Я ввожу (излишне) сложный тип?
Должен ли я использовать boost::variant
для моей простой крошечной проблемы?