成员变量默认初始化模板

时间:2014-10-21 08:52:03

标签: c++

Iam使用不支持c ++ 11的编译器,它不支持类声明的默认初始化。

由于我有一些管理可视化的类,并且包含大量bool标志和其他成员,我想编写一些执行默认初始化的模板类。

我可以实现类似的东西:

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;
};

但我还想使用type作为模板参数

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;
};

显然最后一个例子不起作用。 有没有办法实现这个或已经存在这样的事情?

1 个答案:

答案 0 :(得分:6)

模板参数列表中的语法错误:

template <typename T, T I>
//            ^^^^

除此之外,代码完全正确 - here is a demo