【发布时间】:2017-01-08 09:56:06
【问题描述】:
我正在尝试设计一个其所有数据都是常量并且在编译时知道的类。我可以通过手动输入来创建它,但我想使用一个模板,这样我就不必多次重写几乎相同的代码。
我在想模板是这样做的方法,例如
template<class T> class A { ... }
A<float>
A<MyObject>
A<int>
但后来我不确定如何将我知道的常量数据获取到这个对象中。我可以在运行时使用一个成员函数来执行此操作,该函数对类型或类似的东西执行 switch 语句,但我理想地希望它有效地成为我使用的哑数据持有者。
所以在A<float> 的情况下,我会这样:
// member function
int getSize() {
return 4;
}
代替(伪代码)
// member function
int getSize() {
if (type == float) {
return 4;
} else if ...
}
我想知道是否有已知的方法可以做到这一点?我对 constexpr 没有任何经验,这可能是关键吗?
编辑:澄清:我希望成员函数始终根据模板化类型/类返回相同的结果。例如,A 总是从 getSize() 返回 4,从 getSomethingElse() 返回 1,从 getAnotherThing() 返回 6.2。其中 A 将从 getSize() 返回 8,从 getSomethingElse() 返回 2,从 getAnotherThing() 返回 8.4。
【问题讨论】:
-
你试过
std::type_info吗? -
你在重新实现
sizeof吗? -
这个模板应该做什么
const double x = 0.75;没有? -
@LogicStuff 不,我看到 getSize 现在是一个不好的例子,但该对象还有其他方法只对我有意义。
-
@LYF_HKN 类型特征,但我自己的特征。
标签: c++ templates c++14 constexpr