成员变量默认初始化模板

member variable default initialization template

本文关键字:初始化 默认 变量 成员      更新时间:2023-10-16

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>
//            ^^^^

除此之外,代码是完全正确的——这里是一个演示。