有没有办法在类实例中存储编译时常量?

时间:2018-06-18 06:37:57

标签: c++ templates template-meta-programming compile-time compile-time-constant

我试图看看我是否可以创建一个异构类型,它只能在其生命周期中包含多种类型之一(任一模式),我想这样做:

TemplateBaseClass

其中typename //strong typed (heterogeneous) container template<typename list> struct STC { template<typename a> STC(const a& value) :hc_(value), index_(TMP::elem_index<a, list>::value) {} template<typename a> STC(a&& value) : hc_(value), index_(TMP::elem_index<a, list>::value) {} //imaginary compile time const constexpr size_t index()const { return index_; } typename TMP::index<list,index()>::type get() { return c_.get<index()>(); } operator typename TMP::index<list,index()>::type ()const { return get(); } private: union_magic<list> c_; const size_t index_; }; 是模板元类型列表,list是用于重新检索列表元素索引的模板元函数,TMP::elem_index是用于重新查找元素的元函数已知指数。

在我看来,没有办法跨越类数据成员和编译时常量之间的界限。我错过了什么吗?这是错误的方法吗?或者它只是在c ++中无法做到的事情,必须在运行时解决?

至于如何使用容器:

TMP::index

应显示&#34;调用int类型的函数:1&#34;。

1 个答案:

答案 0 :(得分:1)

以下两个答案的组合是否有助于获得您想要的内容?

building and accessing a list of types at compile time

How can I get the index of a type in a variadic class template?

顺便说一下,在index_中存储编译时元数据类没有用,它被分配并且只能在运行时使用。您可能会将其定义为static constexpr size_t kIndex