C ++成员函数重载与& (&符) [英] C++ member function overloading with & (ampersand)

查看:166
本文介绍了C ++成员函数重载与& (&符)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何选择正确的错误()成员函数?我需要以某种方式投射吗?

How to pick the correct error() member function? Do I need to cast somehow?

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
}


推荐答案


我需要以某种方式投放吗?

Do I need to cast somehow?

是的,您可以使用 static_cast

Yes, you can use static_cast.


static_cast也可以用于通过对特定类型执行函数到指针的转换来消除函数重载的歧义,如

static_cast may also be used to disambiguate function overloads by performing a function-to-pointer conversion to specific type, as in

std :: transform(s.begin(),s.end(),s.begin(),static_cast< int(*)(int)>(std :: toupper)); p>

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);

这篇关于C ++成员函数重载与&amp; (&符)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆