首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我没有得到匹配的函数调用错误?

为什么我没有得到匹配的函数调用错误?
EN

Stack Overflow用户
提问于 2013-05-05 15:12:55
回答 1查看 1K关注 0票数 2

我试图调用一个指向成员函数的指针,但不知道它为什么不能工作。以下是错误:

prog.cpp:在函数‘int main()’中: prog.cpp:16:19:错误:没有调用‘foo(A, int (A::*)())’的匹配函数 prog.cpp:16:19:注意:候选人是: prog.cpp:4:6:注:template<class A, class B> decltype ((declval<A>)().*(declval<B>)()) foo(A&&, B&&) prog.cpp:4:6:注意:模板参数演绎/替换失败: prog.cpp:代替‘template<class A, class B> decltype ((declval<A>)().*(declval<B>)()) foo(A&&, B&&) [with A = A; B = int (A::*)()]’: prog.cpp:16:19:需要在这里 prog.cpp:4:6:错误:非静态成员函数的无效使用

代码语言:javascript
复制
#include <utility>

template <typename A, typename B>
auto foo(A&& a, B&& b) -> decltype(std::declval<A>().*(std::declval<B>()))
{
    return (std::forward<A>(a)).*(std::forward<B>(b));
}

struct A
{
    int f() { return 0; }
};

int main()
{
    foo(A(), &A::f);
}

更新:

我更改了代码,以响应评论/答案,这就是我所拥有的:

代码语言:javascript
复制
template <typename A, typename B>
auto foo(A&& a, B&& b) -> decltype((std::declval<A>().*(std::declval<B>()))())
{
    return (std::forward<A>(a)).*(std::forward<B>(b))();
}

但当我称之为它时,它正在回归:

prog.cpp:用于实例化‘decltype ((declval<A>)().*(declval<B>)()()) foo(A&&, B&&) [with A = A; B = int (A::*)(); decltype ((declval<A>)().*(declval<B>)()()) = int]’: prog.cpp:16:19:需要在这里 prog.cpp:6:55:错误:必须使用‘.*’‘->*’调用 ‘std::forward<int (A::*)()>((* & b)) (...)’, e.g. ‘(... ->* std::forward<int (A::*)()>((* & b))) (...)’ prog.cpp:在函数‘decltype ((declval<A>)().*(declval<B>)()()) foo(A&&, B&&) [with A = A; B = int (A::*)(); decltype ((declval<A>)().*(declval<B>)()()) = int]’中: prog.cpp:7:1:警告:控件到达非无效函数的末尾- reaches type

我做错了什么,我该如何解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-05 15:22:45

比你编码的要简单一些。你忘了调用你的函数:

代码语言:javascript
复制
template <typename A, typename B>
auto foo(A&& a, B&& b) -> decltype((a.*b)())
{
    return ((std::forward<A>(a)).*(std::forward<B>(b)))();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16385931

复制
相关文章

相似问题

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