Mat*_*fer 27 c++ overloading ampersand c++11
如何选择正确的error()成员函数?我需要以某种方式施展吗?
using namespace std;
struct test
{
int error();
void error(int x);
int fun();
};
int main() {
auto f1 = &test::error; // how to pick the correct function?
auto f2 = &test::fun; // works
}
Run Code Online (Sandbox Code Playgroud)
Jos*_*son 35
您只需显式指定成员函数指针类型即可.
int (test::*f1)() = &test::error;
void (test::*f2)(int) = &test::error;
Run Code Online (Sandbox Code Playgroud)
son*_*yao 27
我需要以某种方式施展吗?
是的,你可以使用static_cast
.
static_cast也可用于通过执行到特定类型的函数到指针转换来消除函数重载的歧义,如
std::transform(s.begin(), s.end(), s.begin(), static_cast<int(*)(int)>(std::toupper));
所以你可以:
auto f1 = static_cast<int(test::*)()>(&test::error);
auto f2 = static_cast<void(test::*)(int)>(&test::error);
Run Code Online (Sandbox Code Playgroud)