我的代码是构造有参数为默认
template <class T1, class T2>
class MyClass
{
T1 first;
T2 second;
public:
//default constructor
MyClass():first(T1()), second(T2()) {}
}
我希望有可以取0,1或2个参数(参数为默认值)的单个构造函数。这里T1和T2既可以是原始类型也可以是非原始类型。
我的代码是构造有参数为默认
template <class T1, class T2>
class MyClass
{
T1 first;
T2 second;
public:
//default constructor
MyClass():first(T1()), second(T2()) {}
}
我希望有可以取0,1或2个参数(参数为默认值)的单个构造函数。这里T1和T2既可以是原始类型也可以是非原始类型。
与此构造函数替换现有的构造函数:
MyClass(const T1& t1 = T1(), const T2& t2 = T2()):first(t1), second(t2) {}
这将与现有的构造函数 –
冲突显然,您将首先移除现有的构造函数... –
您应该使那个'explicit'。 –
试试这个:
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个参数都需要的构造函数。
与所有其他函数一样,默认参数可以在构造函数初始化程序列表中使用。
MyClass(T1 t1 = T1(), T2 t2 = T2()) : first(t1), second(t2) {}
那么,有什么问题?在参数列表中声明它们。 – jrok
如何在参数列表中设置非基元类型的默认值 – user2620561