我有一个包含2个构造函数的类。
explicit MyClass(size_t num);
template<class T> MyClass(T myObj);
每当我做
时我都想要MyClass obj( 30 );
将调用第一个构造函数,
隐式构造函数和
MyClass obj = 30;
第二个ctor将被召唤。
我该如何实现?
答案 0 :(得分:7)
30是有符号整数值,因此它不完全符合第一个构造函数的签名(因此,模板会被实例化)。
您可以更改显式构造函数的签名以接受int
,而Myclass obj( 30 );
将调用显式构造函数,或者使用30u
调用它以便与显式匹配签名。
答案 1 :(得分:0)
关于第一个对象
MyClass obj (30);
这是直接初始化,因此,如果参数具有正确的参数类型,则应调用构造函数。在这种情况下,该参数是不正确的,因此在这种情况下,为了更加准确,我将size_t更改为unsigned int,然后将30u传递给该对象。在这种情况下,将调用第一个构造函数。 关于第二个对象
MyClass obj = 30;
这是通过副本初始化的,因此我将第二个构造函数更改为这样的副本构造函数:
template<class T> MyClass(const T& myObj);
在这种情况下,我认为将数据成员更改为int更好。尽管如此,应该先调用第一个构造函数,然后再调用第二个。