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 既可以是原始类型,也可以是非原始类型。

4

3 回答 3

3

用这个构造函数替换你现有的构造函数:

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

于 2013-07-25T21:50:38.633 回答
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 个参数的情况下,只需要一个构造函数。

于 2013-07-25T21:51:16.010 回答
0

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

 MyClass(T1 t1 = T1(), T2 t2 = T2()) : first(t1), second(t2) {}
于 2013-07-25T21:54:17.440 回答