模板成员默认初始化

时间:2012-09-04 15:52:24

标签: c++ templates initialization default-value

假设我有以下模板

template <typename T>
class{
   T t;
};

现在,我想添加一个构造函数,用它的类型的默认值初始化t。也就是说,对于数字类型,t应该用0初始化,对于指针,t应该用nullptr初始化。最后,可能还有其他类型的结构。这里,一个好的初始化将是默认的构造函数(无论如何都会被调用,所以我不必在这里做任何事情)。

在结论中我正在寻找这样的东西:

template<typename T>
class X{
    T t;
    X() : t(default_value<T>::value);
}

正如我想象中的语法指出的那样,我认为使用具有不同特征的某种模板可能会带有默认值。但是如何处理结构和类?由于我已指定t(...),因此默认构造函数不再是一个选项。

1 个答案:

答案 0 :(得分:11)

你可以做到

X() : t() { }

和/或C ++ 11中的这个

X() : t { } { } // see Johannes Schaub's comments about this

那会初始化(或者是默认初始化吗?)t到它的类型的默认值,是内置的0,数组的一系列(值?默认)初始化,或者使用用户定义类型的默认构造函数。