c++歧义重载问题

C++ ambiguity overloading problem

本文关键字:问题 重载 歧义 c++      更新时间:2023-10-16

我有一个名为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++写代码了