2012-09-04 130 views
1

假设我有以下模板模板成员默认初始化

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

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

在conlusion我期待这样的事情:

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

正如我想象中的语法所指出的,我认为这可能是可能以某种模板与携带的默认值不同的专业。但是如何处理结构和类?由于我指定了t(...),所以默认构造函数不再是一个选项。

回答

9

你可以做

X() : t() { } 

和/或在C++ 11

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

这将珍惜初始化(或者是默认初始化?)t到任何默认值是对于它的类型,可以是内置的0,数组的一系列(value?default)初始化,或者使用用户定义类型的默认构造函数。

+1

使用{}是IMO不是一个好主意,如果你想有一个特定的初始化(在这种情况下,你想要初始化值)。例如{}现在如果T是引用类型,那么您默默地具有未定义的行为。 –

+0

@ JohannesSchaub-litb好的,谢谢,我对此毫不知情。 –

相关问题