我想要一个带有参数 typename T 的模板和一个代表 null_object 的 T 类型对象。目标是创建一个容器类,其中对于每种类型,为空构造函数提供给定的 null_value。例如
template<typename T, T null_value>
class MyObject {
private:
std::array<T,4> data;
public:
MyObject() {
data.fill(null_value);
}
};
但是,我无法使用上面给定的语法来执行此操作。我怎样才能做到这一点?如果嵌套模板不可能做到这一点,是否有办法为某些给定的模板值定义不同的构造函数?例如
template<typename T>
class MyObject {
private:
std::array<T,4> data;
public:
MyObject<int>() {
data.fill(0);
}
MyObject<float>() {
data.fill(0.0f);
}
MyObject<char>() {
data.fill('a');
}
};
编辑:对于某些类型,如int
,第一块代码将编译。但是,对于诸如 之类的类型float
,块将无法编译。
如果问题是“如何根据类型选择填充值”,那么我建议您:
或者从辅助模板获取值: