2013-07-25 59 views
0

我的代码是构造有参数为默认

template <class T1, class T2> 
class MyClass 
{ 

    T1 first; 
    T2 second; 
    public: 
    //default constructor 
    MyClass():first(T1()), second(T2()) {} 
} 

我希望有可以取0,1或2个参数(参数为默认值)的单个构造函数。这里T1和T2既可以是原始类型也可以是非原始类型。

+3

那么,有什么问题?在参数列表中声明它们。 – jrok

+0

如何在参数列表中设置非基元类型的默认值 – user2620561

回答

3

与此构造函数替换现有的构造函数:

MyClass(const T1& t1 = T1(), const T2& t2 = T2()):first(t1), second(t2) {}

+0

这将与现有的构造函数 –

+2

冲突显然,您将首先移除现有的构造函数... –

+3

您应该使那个'explicit'。 –

1

试试这个:

template <class T1, class T2> 
class MyClass 
{ 

    T1 first; 
    T2 second; 
    public: 
    //default constructor 
    MyClass(T1 fst=T1(), T2 sec = T2()):first(fst), second(sec) {} 
}; 

int main() 
{ 
    MyClass<int,int> c; 
    MyClass<int,int> d(5); 
    MyClass<int,int> e(5,10); 
} 

你只分配在定义的默认值。你必须小心,默认参数总是参数列表中的最后一个。而这一个构造函数就是所有0,1或2个参数都需要的构造函数。

0

与所有其他函数一样,默认参数可以在构造函数初始化程序列表中使用。

MyClass(T1 t1 = T1(), T2 t2 = T2()) : first(t1), second(t2) {}