c++ - 2个重载有相似的转换

标签 c++

类似的问题 C++ Function Overloading Similar Conversions 已被问到,我了解问题的一般前提。寻找解决方案。

我有 2 个重载函数:

virtual IDataStoreNode* OpenNode(const char *Name, bool bCreateIfNotExist,int debug=0) { return 0; 
}

virtual IDataStoreNode* OpenNode(const char* Name,int debug=0) const { return 0; }

从错误看来,bool 和 int 不能用来区分函数重载。

问题是,有没有办法解决这个问题?

最佳答案

boolint 可以 用于区分函数重载。正如人们所期望的那样,bool 参数将更喜欢 bool 重载和 int 参数 - int 重载。

从错误信息来看(我假设你的问题的标题是你得到的错误信息的一部分),你正在处理的是你提供的参数既不是 bool 也不是 int,但是到 boolint 的转换存在并且具有相同的等级。

例如,考虑这个

void foo(bool);
void foo(int);

int main() {
  foo(0);     // OK
  foo(false); // OK
  foo(0u);    // ERROR: ambiguous
}

前两个调用将以预期的方式成功解决。第三次调用不会解析,因为参数类型实际上是 unsigned int,但是它支持对 boolint 的隐式转换,从而使叫模棱两可。

你如何调用你的函数?向我们展示您要传递的论点。

关于c++ - 2个重载有相似的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723112/

相关文章:

C++:不同翻译单元中具有相同名称的不同类

c++ - 了解 std::array 的 move 语义

c# - 为什么 C++ msgpack-c 在数字 10 (0x0A) 之前添加数字 13 (0x0D),而 C# MessagePack-CSharp 没有?

c++ - 在 C++ 中读取 XML 文件

c++ - 将 STL vector<bool> 快速转换为 bool * array

C++读取整数序列

c++ - 获取 vector 中元素的地址

C++ 给出错误

c++ - 在 gmock 的 EXPECT_CALL 中调用 sleep()

c++ - 数组的平均分数