wis*_*iak 5 c++ constructor casting c++11
我有一个类来存储大的无符号数,我想允许用户创建一个使用对象类型,例如long long,int,unsigned int等等,也从string.我创建了一个构造函数BigNumber(const unsigned long long),BigNumber(const std::string)但我想禁止用户使用如下构造:BigNumber('a')或BigNumber(true).我听说过,explicit所以我决定在我的课程定义中写下以下几行:
explicit BigNumber(const bool) = delete;
explicit BigNumber(const char) = delete;
不幸的是,当我想创建对象时:BigNumber x(1)或者BigNumber("1234")我得到错误,重载构造函数的调用是不明确的.在我写这些行之前,我没有收到此消息 explicit.如何解决这个问题呢?
您可以使用模板来实现:
template<typename T,
typename = typename std::enable_if<
std::is_integral<T>::value
&& !std::is_same<char, T>::value
&& !std::is_same<bool, T>::value>::type>
explicit BigNumber(T const n);
Run Code Online (Sandbox Code Playgroud)
不能使用bools或chars 调用此构造函数。
| 归档时间: |
|
| 查看次数: |
983 次 |
| 最近记录: |