Fur*_*ish 6 c++ overload-resolution
如果我们有:
void foo(int) {}
void foo(const int&) {}
Run Code Online (Sandbox Code Playgroud)
我们不能这样调用foo:
foo(3);
Run Code Online (Sandbox Code Playgroud)
因为调用是模棱两可的:
Run Code Online (Sandbox Code Playgroud)error: call of overloaded 'foo(int)' is ambiguous 40 | foo(3); | ^ note: candidate: 'void foo(int)' 36 | void foo(int) {} | ^~~ note: candidate: 'void foo(const int&)' 37 | void foo(const int&) {} | ^~~
我们可以做的是明确提供正确的重载,例如通过函数指针:
auto (*ptr)(const int&) -> void = foo;
ptr(3); // calls the "const int&" overload, obviously
Run Code Online (Sandbox Code Playgroud)
然而,这种方式违背了方便重载的目的。问题是 - 我可以以某种方式以更......优雅的方式消除呼叫的歧义吗?道路?是否有过哪里会需要提供案件都过载,为T和const T&?
您似乎在问我们是否可以强制重载解析机制选择一个签名而不是另一个签名,而不是明确地拼写出您想要的签名。
据我所知,强制重载解析选择重载而不是重载的唯一方法int是const int&将参数转换为左volatile int值,并且没有办法强制重载解析选择const int&重载而不是int重载。
无论如何,我想不出为什么有人想要编写这组特定的重载。
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |