gpt4 book ai didi

c++ - 如何防止构造函数在 C++ 中转换参数类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:55 24 4
gpt4 key购买 nike

我有一个类来存储大的无符号数,我想允许用户使用 long longintunsigned 等类型创建对象int 等等,也来自 string 。我创建了一个构造函数 BigNumber(const unsigned long long)BigNumber(const std::string) 但我想禁止用户使用如下结构:BigNumber( 'a')BigNumber(true)。我听说过 explicit 所以我决定在我的类定义中写下以下几行:

显式 BigNumber(const bool) = delete;
显式 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);

此构造函数不能用 boolchar 调用。

关于c++ - 如何防止构造函数在 C++ 中转换参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33874798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com