C++ 是否将成员函数指针作为参数传递?问:;A.
我正在尝试做一些我认为非常简单的事情——传递一个队列和一个函数,并将该函数应用于队列中的每个项目——但我无法编译它C++ 是否将成员函数指针作为参数传递?问:;A.,c++,member-function-pointers,C++,Member Function Pointers,我正在尝试做一些我认为非常简单的事情——传递一个队列和一个函数,并将该函数应用于队列中的每个项目——但我无法编译它 class Foo { public: void doStuff(); void doStuffOnBars(std::queue<Bar*> &bars, void (*func)(Bar &bar)); virtual void stuff(Bar &bar) = 0; std::queue<Bar*&
class Foo
{
public:
void doStuff();
void doStuffOnBars(std::queue<Bar*> &bars, void (*func)(Bar &bar));
virtual void stuff(Bar &bar) = 0;
std::queue<Bar*> _bars;
};
void Foo::doStuff()
{
doStuffOnBars(_bars, stuff);
}
void Foo::doStuffOnBars(std::queue<Bar*> &bars, void (*func)(Bar &bar))
{
while (!bars.empty())
{
func(*bars.front());
bars.pop();
}
}
class-Foo
{
公众:
void doStuff();
void dostufforbar(标准:队列和酒吧,void(*func)(酒吧和酒吧));
虚拟空白填充(条形和条形)=0;
标准::队列_条;
};
void Foo::doStuff()
{
Dostuffonbar(_酒吧,东西);
}
void Foo::dostuffonbar(标准::队列和酒吧,void(*func)(酒吧和酒吧))
{
而(!bar.empty())
{
func(*bar.front());
bar.pop();
}
}
dostuffinbar(\u条,填充物)
和dostuffinbar(\u条,此->填充物)
返回C3867
dostuffinbar(\u bar,&stuff)
和dostuffinbar(\u bar,&this->stuff)
返回C2276
dostuffinbar(_Bar,&(Foo::stuff))
withvoid dostuffinbar(std::queue&Bar,void(Foo::*func)(Bar&Bar))
返回C2064
所以我完全没有主意了。我看到的所有函数指针的例子似乎都能神奇地工作——我想大多数都在全局范围内?为什么这与成员函数不同?在我问之前(咬了一点指甲和拔了一点头发之后),我自己设法弄明白了。我将发布工作代码供其他人参考:
class Foo
{
public:
void doStuff();
void doStuffOnBars(std::queue<Bar*> &bars, void (Foo::*func)(Bar &bar));
virtual void stuff(Bar &bar) = 0;
std::queue<Bar*> _bars;
};
void Foo::doStuff()
{
doStuffOnBars(_bars, stuff);
}
void Foo::doStuffOnBars(std::queue<Bar*> &bars, void (Foo::*func)(Bar &bar))
{
while (!bars.empty())
{
(this->*func)(*bars.front());
bars.pop();
}
}
class-Foo
{
公众:
void doStuff();
void dostufforbar(标准:队列和酒吧,void(Foo::*func)(酒吧和酒吧));
虚拟空白填充(条形和条形)=0;
标准::队列_条;
};
void Foo::doStuff()
{
Dostuffonbar(_酒吧,东西);
}
void Foo::dostuffonbar(标准::队列和酒吧,void(Foo::*func)(酒吧和酒吧))
{
而(!bar.empty())
{
(this->*func)(*bar.front());
bar.pop();
}
}
必须使用(this->*func)
调用函数-函数需要对象引用(this
),并且函数需要取消引用(毕竟它是一个指针)。现在我知道了,这看起来很明显,很有道理!!然而,我认为如果你对使用函数指针还不熟悉,那么它会引起一些混乱——这就是为什么我要发布这个答案的原因