c++ - 模板成员默认初始化

标签 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(...),默认构造函数不再是一个选项。

最佳答案

你可以这样做

X() : t() { }

和/或 C++11 中的这个

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

这会将值初始化(或者是默认初始化?) t 为其类型的默认值,无论是内置的 0 还是一系列(值?默认)初始化对于数组,或使用用户定义类型的默认构造函数。

关于c++ - 模板成员默认初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12267136/

相关文章:

C++ 有没有办法根据 type_traits 进行模板重载?

c++ - 继承的运算符重载不适用于派生类

java - java中变量的初始化和声明问题

javascript - 初始化后设置 TinyMCE 编辑器选项

c++ - 如果我不自己分配数组元素的值是什么

c++ - 构造一个内部有结构的类 C++

c++ - 如何获取当前日期和时间?

c++ - 错误 : use of deleted function for overloaded template

c++ - 将数组传递给函数

iphone - 使用 ifstream 读写二进制字符串的正确格式