我有一个带有一些变量的简单对象。我将其中一些对象存储在一个数组中:
class Obj {
public:
Obj(int i, int j) : var(i), var2(j) {
obj.initialize(); //or something
}
int var, var2;
MyOtherNonConstExprObject obj;
}
...
std::array<Obj> v{Obj{1,2}, Obj{3,4}};
现在,出于优化目的,我想制作var
constexpr。 请注意,我无法创建整个对象/构造函数constexpr
,因为在编译时不知道MyOtherNonConstExprObject。
我的最终目标是能够在编译时做同样的事情(我的热门路径充满了那些测试):
if constexpr(v[0].var == v[1].var) {
...
}
根据我的理解,这意味着我需要创建Obj
的模板,否则我的非模板化类的所有实例将具有var
的相同值(这有意义)。
所以我做了类似的事情:
template<int v, int w>
class Obj {
public:
constexpr int var() const {
return v;
}
constexpr int var2() const {
return w;
}
....
};
通过调用constexpr函数来访问var。
这一切都很好,除非我尝试将Obj
s与不同的模板值放在同一个向量中。
我不能constexpr const std::array<Obj> o{Obj<1,2>{}, Obj<3,4>{}}
,因为2个对象有不同的类型。
任何人都知道如何为某个给定类的实例声明一个类成员constexpr并将它们存储在一个stl容器中吗?
请注意:
编辑:将矢量更改为数组,添加第二个模板参数。