如何正确初始化模板类型的成员变量?

时间:2010-01-26 22:07:23

标签: c++ templates

建议我有以下模板功能:

template<class T>
void doSomething()
{
    T a; // a is correctly initialized if T is a class with a default constructor
    ...
};

但是如果T是原始类型,则变量a未初始化。我可以写T a(0),但如果T是一个类,这不起作用。有没有办法在两种情况下初始化变量(T == class,T == int,char,bool,...)?

2 个答案:

答案 0 :(得分:33)

像这样:

T a{};

Pre-C ++ 11,这是最简单的近似值:

T a = T();

但它需要T可复制(虽然副本肯定会被删除)。

答案 1 :(得分:1)

C ++ 11中的类模板字段具有相同的语法:

template <class T>
class A {
  public:
    A() {}
    A(T v) : val(v) {}
  private:
    T val{};
};