成员变量默认初始化模板
member variable default initialization template
Iam使用不支持c++11的编译器,该编译器不支持类声明的默认初始化。
由于我有一些管理可视化的类,并且确实包含大量的bool标志和其他成员,所以我想写一些模板类来执行默认的init。
我可以实现这样的东西:
template <unsigned int I>
class UIntDef{
public:
UIntDef(unsigned int d=I):i(d){
cout << "init i="<<d<<endl;
}
operator unsigned int&(){return i;}
unsigned int i;
};
或
template <bool I>
class BoolDef{
public:
BoolDef(bool d=I):i(d){
cout << "init i="<<d<<endl;
}
operator bool&(){return i;}
bool i;
};
但我也想使用类型作为模板参数
template <type T, T I>
class Def{
public:
Def(T d=I):i(d){
cout << "init i="<<d<<endl;
}
operator T&(){return i;}
T i;
};
显然最后一个例子不起作用。有没有办法实现这一点,或者已经存在这样的东西?
模板参数列表中的语法错误:
template <typename T, T I>
// ^^^^
除此之外,代码是完全正确的——这里是一个演示。
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 副本初始化的默认模板参数推导
- 使用 std::分配器在 constexpr 中进行默认初始化
- 在C++中使用默认构造函数初始化对象的不同方法
- 强制使用默认构造函数对成员进行未初始化的声明
- 使用默认构造函数初始化对象的不同方法
- 在没有默认构造函数时使用垃圾数据初始化对象
- 为什么对象默认初始化,但基元不在C++?
- 默认参数和空列表初始化
- 为什么std::atomic的默认构造函数不默认初始化底层存储值
- C++中未初始化成员布尔变量的默认值是多少?
- 两个成员,在Base中默认初始化,可能在Derived中非默认初始化
- 默认初始化无法正常工作
- 如何用默认值0或-1初始化unordered_set
- C++11 默认类成员初始化与初始值设定项列表同时
- 使用聚合初始化模拟默认函数参数是否存在任何陷阱?
- 初始化在类类型 #define 中定义的非静态成员数组,不带默认 ctor
- 在皮条类中初始化默认值的最佳位置
- 值初始化:默认初始化或零初始化