【发布时间】:2010-11-25 08:51:09
【问题描述】:
好的,所以我有我的代码的这个小角落,我希望我的函数返回(int、double、CString)中的任何一个来清理代码。
所以我认为:用三个成员等编写一个类似联合的包装器 struct 没有问题。但是等等!我没有读过 boost::variant 吗?这不正是我需要的吗?这将使我免于自己弄乱包装器结构! (请注意,我的项目中已经有了 boost 库。)
所以我打开浏览器,导航到Chapter 28. Boost.Variant,然后瞧:
变体类模板是一个安全的、通用的、基于堆栈的可区分联合容器,提供了一种简单的解决方案,用于从一组异构类型中操作对象 [...]
太棒了!正是我需要的!
然后它继续:
Boost.Variant 与 Boost.Any
- Boost.Any 很少使用模板元编程技术(避免潜在的难以阅读的错误消息和显着的编译时处理器和内存需求)。
[...]
疑难解答
“达到内部堆限制” -- Microsoft Visual C++ -- 编译器选项 /ZmNNN 可以增加内存分配限制。 NNN 是一个缩放百分比(即 100 表示默认限制)。 (试试 /Zm200。)
[...]
呃哦。所以使用 boost::variant 可能会显着增加编译时间并生成难以阅读的错误消息。如果有人将我对 boost::variant 的使用转移到一个公共头文件中,我们的项目会突然需要更长的时间来编译吗? 我是否引入了(不必要的)复杂类型?
我应该使用boost::variant 来解决我的simple tiny 问题吗?
【问题讨论】: