我有一个有 2 个构造函数的类。
explicit MyClass(size_t num);
template<class T> MyClass(T myObj);
每当我制作时我都想要
MyClass obj( 30 );
将调用第一个构造函数,
在隐式构造函数和
MyClass obj = 30;
第二个ctor将被调用。
我怎样才能让它发生?
我有一个有 2 个构造函数的类。
explicit MyClass(size_t num);
template<class T> MyClass(T myObj);
每当我制作时我都想要
MyClass obj( 30 );
将调用第一个构造函数,
在隐式构造函数和
MyClass obj = 30;
第二个ctor将被调用。
我怎样才能让它发生?
30 是一个有符号整数值,因此它不完全符合您的第一个构造函数的签名(因此,模板被实例化)。
您可以将显式构造函数的签名更改为接受int
,然后Myclass obj( 30 );
调用显式构造函数,或者调用它以30u
匹配显式签名。
关于第一个对象
MyClass obj (30);
这是直接初始化,因此如果参数具有正确的参数类型,则应调用构造函数。在这种情况下,参数不正确,所以为了在这种情况下更准确,我会将 size_t 更改为 unsigned int,然后将 30u 传递给该对象。在这种情况下,将调用第一个构造函数。关于第二个对象
MyClass obj = 30;
这是复制初始化,因此我会将第二个构造函数更改为复制构造函数,如下所示:
template<class T> MyClass(const T& myObj);
在我看来,在这种情况下,将您的数据成员更改为整数会更好。尽管如此,应该调用第一个构造函数,然后根据需要调用第二个构造函数。