c++歧义重载问题
C++ ambiguity overloading problem
我有一个名为FileProc的类,它运行文件IO操作。在一个实例中,我声明了两个函数(它们是operator= functions的子函数),它们都完全不同:
const bool WriteAmount(const std::string &Arr, const long S)
{
/* Do some string conversion */
return true;
}
const bool WriteAmount(const char Arr[], unsigned int S)
{
/* Do some string conversion */
return true;
}
如果我用'char string'调用WriteAmount,它会报告一个歧义错误-说它混淆了char string的WriteAmount和std::string的WriteAmount。我知道下面发生了什么—它试图使用std::string构造函数将char string隐式地转换为std::string。但是我不希望这种情况发生在WriteAmount的实例中(IE我不希望在函数中发生任何隐式转换-给定每个函数都针对每个角色进行了优化)。
我的问题是,为了一致性,在不改变函数格式的情况下(IE不改变参数的数量或它们出现的顺序),也不改变标准库的情况下,是否有办法防止有问题的函数中的隐式转换?
我忘记添加了,最好不要进行类型转换,因为这对函数调用来说很繁琐,而且对用户不友好。
出现歧义是因为第二个参数不同。尝试用long x = ...; WriteAmount("foo", x)
调用它会引起歧义,因为它与第一个重载更好地匹配第二个参数,但第一个参数与第二个重载更好地匹配。
使第二个形参在两种情况下都具有相同的类型,这样就可以消除歧义,因为这样第二个形参在两个重载中都匹配得同样差/好,而第一个形参在第二个重载中匹配得更好。
不能更改第二个参数并将其强制转换为unsigned int吗?它应该不能使用第一个函数调用。我已经很久没有用c++写代码了
相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 在C++中使用重载提取运算符时出现问题
- 重载运算符与添加问题
- 加、乘、除、减复数的问题 C++ - 运算符重载
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 关于重载 -> 运算符中 const 关键字的特定位置的问题
- 基于 SFINAE 的特征实现问题与函数模板重载
- 关于在成员重载中使用 std::move() 的问题
- 字符 * 未从重载运算符或内存管理问题正确返回
- constexpr 运算符重载使用参数的问题
- c++中重载输入运算符的问题
- 在C++中写入 4D 矢量时遇到问题(没有可行的重载"=")
- 我的重载函数有什么问题?
- C++使用模板参数来解决重载问题
- C++ 中重载成员函数的问题
- 我想知道我将如何实现 + 运算符重载.我已经从我上一个问题中计算出 += 运算符重载
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- 解决 CRTP 函数重载歧义问题
- C++:创建线程时出现问题;错误 C2672:"std::invoke":找不到匹配的重载函数
- C++重载构造函数问题