首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++成员函数重载&(符号)

C++成员函数重载&(符号)
EN

Stack Overflow用户
提问于 2016-03-14 10:17:48
回答 4查看 2.4K关注 0票数 28

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

代码语言:javascript
复制
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
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-14 10:21:50

我需要以某种方式施展吗?

是的,你可以使用static_cast

static_cast还可以通过执行函数到指针转换为特定类型来消除函数重载的歧义,如 static_cast(std::flush));std::for_each(files.begin(),files.end() )

所以你可以:

代码语言:javascript
复制
auto f1 = static_cast<int(test::*)()>(&test::error);
auto f2 = static_cast<void(test::*)(int)>(&test::error);
票数 28
EN

Stack Overflow用户

发布于 2016-03-14 10:24:58

您可以只显式地指定成员函数指针类型。

代码语言:javascript
复制
int (test::*f1)() = &test::error;
void (test::*f2)(int) = &test::error;
票数 35
EN

Stack Overflow用户

发布于 2016-03-15 00:28:59

既然已经给出了答案,我将给出一个更简单的解决方案。如果您不想每次都写出强制转换,那么这种情况对于宏来说是完美的:

代码语言:javascript
复制
template<class T>
using test_type_t = T test::*;
#define TEST_CAST(T, F) static_cast<test_type_t<T>>(&F)

auto f1 = TEST_CAST(void(int), test::error);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35984788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档