c++ - 嵌套提升变体类型以增加类型限制?

标签 c++ boost-variant

考虑:

typedef boost::variant<T0, ..., TN> variant_T_t;
typedef boost::variant<U0, ..., UN> variant_U_t;
...
typedef boost::variant<variant_T_t, variant_U_t, ...> variant_t;

这扩展了 limit on the number of types可以由我的类型保存为 pow(BOOST_VARIANT_LIMIT_TYPES, L),其中 L 是嵌套的级别数。

这是(在某种程度上)可接受的解决方案,还是只是一个糟糕的黑客攻击?那里有更好的解决方案吗?也许老式的 union 更合适?

最佳答案

从 boost 1.57 开始,可以通过 boost::make_variant_over 创建 boost 变体,它将类型 Sequence 作为类型参数。在对 boost::mpl 的 Sequence 概念建模之前,对该类型没有类型限制。

vanilla boost::mpl::vector typelist 最多可以使用 50 种类型。 不过,如果您有一个兼容 C++11 的编译器,那么创建您自己的可变参数类型列表和一个胶水代码并不难,这使得它成为一个 MPL Sequence。从这一点来看,类型的数量受到编译器允许的最大模板实例化深度的限制,通常为 256。

在此GIST ,我正在使用 Dave Abraham 的类型列表并添加胶水代码,因此它模拟了 mpl 的序列概念。请注意,我还没有对多个编译器进行过详尽的测试,而且我只是使用 boost 1.56 对其进行了测试。

关于c++ - 嵌套提升变体类型以增加类型限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17028353/

相关文章:

c++ - 具有 boost 变体的段错误

c++ - boost::variant 的访客模板

c++ - std::vector 是否比 std::list 更容易失败(STL 容器)

c++ - 动态存储内部配置

c++ - 将对象转换为不同的类

c++ - 从变量 <C,B> 分配变量 <A,B,C>?

c++ - 实现一个对象目录:boost::any、boost::variant,或者?

c++ - 如何从无法注册到函数向导的 xll 加载项调用函数?

c++ - C++ 中 "using"声明的范围是什么?

c++ - 与汽车发电机相关的 Boost-spirit-karma 和 boost-variant "concepts"