C++ 指向类组合中成员函数的指针

C++ 指向类组合中成员函数的指针,c++,function,class,C++,Function,Class,我有两门课,Foo和Bar。类Foo包含名为b的类Bar的实例,类Bar需要访问类Foo的成员函数FooFunc。函数FooFunc执行一些算术运算,但目前我只想尝试通过它,但似乎无法使以下MWE(名为scratch.cpp)工作: #包括 类别Foo;//远期申报 分类栏 { 公众: Bar(){} void BarFunc(double(Foo::*func)(double)) { std::cout与非成员函数不同,非成员函数衰减为函数指针,非静态成员函数不衰减为指针 而不是:

我有两门课,
Foo
Bar
。类
Foo
包含名为
b
的类
Bar
的实例,类
Bar
需要访问类
Foo
的成员函数
FooFunc
。函数
FooFunc
执行一些算术运算,但目前我只想尝试通过它,但似乎无法使以下MWE(名为
scratch.cpp
)工作:

#包括
类别Foo;//远期申报
分类栏
{
公众:
Bar(){}
void BarFunc(double(Foo::*func)(double))
{

std::cout与非成员函数不同,非成员函数衰减为函数指针,非静态成员函数不衰减为指针

而不是:

     b.BarFunc(FooFunc);
使用:


您必须使用成员函数指针吗?您不能使用模板(像所有标准库函数一样)或吗?@R Sahu谢谢,这似乎已经解决了它。不过,我真的很好奇为什么。@R Sahu还有,您知道我如何在
std::cout*”之后调用
func(2)
来调用func(…)中成员函数的指针吗“,例如,(…->*func)(…)”
错误。@bcf您必须创建一个Foo对象来调用它。请记住,
&Foo::FooFunc
只标识函数,没有关联的对象。@bcf,我不知道语言开发人员为什么选择这种语法。
scratch.cpp:27:22: error: no matching function for call to ‘Bar::BarFunc(<unresolved overloaded function type>)’
scratch.cpp:27:22: note: candidate is:
scratch.cpp:9:8: note: void Bar::BarFunc(double (Foo::*)(double))
scratch.cpp:9:8: note:   no known conversion for argument 1 from ‘<unresolved overloaded function type>’ to ‘double (Foo::*)(double)’
     b.BarFunc(FooFunc);
     b.BarFunc(&Foo::FooFunc);