有人质疑这个C++函数重载类似转换的类似问题 ,我理解这个问题的一般前提.寻找解决方案.
我有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; }
Run Code Online (Sandbox Code Playgroud)
从错误中可以看出,bool和int不能用于区分函数重载.
问题是,有没有办法解决这个问题?
AnT*_*AnT 13
bool并且int 可以用来区分功能过载.正如人们所预料的那样,bool参数会更喜欢bool重载和int参数 - int重载.
通过错误消息来判断(我假设您的问题的标题是您收到的错误消息的一部分),您所处理的是当您提供的参数既不是bool也int没有转换bool并int存在并具有同等级.
例如,考虑一下
void foo(bool);
void foo(int);
int main() {
foo(0); // OK
foo(false); // OK
foo(0u); // ERROR: ambiguous
}
Run Code Online (Sandbox Code Playgroud)
前两个调用将以预期的方式成功解决.第三个调用将无法解析,因为参数类型实际上是unsigned int,但它支持对两者的隐式转换bool,int从而使调用不明确.
你怎么称呼你的职能?向我们展示你想要传递的论据.
对于以下功能:
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; }
Run Code Online (Sandbox Code Playgroud)
以下调用(例如,可能还有其他调用)将是模棱两可的:
unsigned int val = 0; //could be double, float
OpenNode("", val);
Run Code Online (Sandbox Code Playgroud)
由于 aunsigned int可以转换为bool和int,因此存在歧义。解决它的最简单方法是将参数强制转换为首选重载中的参数类型:
OpenNode("", (bool)val);
Run Code Online (Sandbox Code Playgroud)
或者
OpenNode("", (int)val);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8325 次 |
| 最近记录: |