C++ C++;显式构造函数
我有一个有两个构造函数的类C++ C++;显式构造函数,c++,constructor,explicit,C++,Constructor,Explicit,我有一个有两个构造函数的类 explicit MyClass(size_t num); template<class T> MyClass(T myObj); 将调用第一个构造函数 关于隐式构造函数和 MyClass obj = 30; 将调用第二个ctor 如何实现它?30是一个带符号的整数值,因此它不完全符合第一个构造函数的签名(因此,模板被实例化) 您可以将显式构造函数的签名更改为接受int,而不是Myclass obj(30)将调用显式构造函数,或者使用30u
explicit MyClass(size_t num);
template<class T> MyClass(T myObj);
将调用第一个构造函数
关于隐式构造函数和
MyClass obj = 30;
将调用第二个ctor
如何实现它?30是一个带符号的整数值,因此它不完全符合第一个构造函数的签名(因此,模板被实例化)
您可以将显式构造函数的签名更改为接受
int
,而不是Myclass obj(30)
将调用显式构造函数,或者使用30u
调用它,以便匹配显式签名。关于第一个对象
MyClass obj (30);
这是一个直接初始化,因此,如果参数具有正确的参数类型,则应调用构造函数。在这种情况下,参数是不正确的,因此为了更准确,在这种情况下,我将把size\u t更改为unsigned int,然后将30u传递给这个对象。在这种情况下,将调用第一个构造函数。
重新规划第二个对象
MyClass obj = 30;
这是通过复制进行的初始化,因此我将第二个构造函数更改为复制构造函数,如下所示:
template<class T> MyClass(const T& myObj);
模板MyClass(const T&myObj);
在我看来,在这种情况下,最好将数据成员更改为int。然而,应该调用第一个构造函数,然后根据需要调用第二个构造函数。AFAIK这应该已经发生了。你试过了吗,但没有成功?是的,我试过了…它只在我喜欢(尺码)30的时候起作用。发生了什么?错误是什么?没有错误,但是当我调试时,我可以看到正在调用第二个ctor代码>?有没有办法让它与短、长等一起工作?@TaruStolovich你是什么意思?是否有一个接受所有此类文本的显式构造函数?不能,您必须重载显式构造函数。@DimaRudnik您可以使用
std::enable\u if
和std::is\u integral
。
template<class T> MyClass(const T& myObj);