如何在 stl 算法中使用成员函数作为函数参数传递?

htqx 2006-12-23 08:49:56

class A
{ void print(){}
template<typename F>
void run( F func ) { func(); }

int main() { run( print ); // error
}
}

我本来想用mem_fun,不过好像也没用,没辙了,问一下熟悉这方面的人。
...全文
259 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2006-12-25
  • 打赏
  • 举报
回复
用mem_fun/mem_fun_ref,在<STL源码剖析>上有详细讲解
genius_hb 2006-12-24
  • 打赏
  • 举报
回复
标准的stl算法不能用非静态类成员函数,因为你没办法提供一个对象给它,它没有办法去调用成员函数,因为非静态的成员函数需要一个对象才能调用
htqx 2006-12-24
  • 打赏
  • 举报
回复
class A
{
public :
void print()
{
cout << "print" << endl;
}

template<typename F>
void run( F func ) { func(); }

template<typename C>
class mem_call_t
{
private:
typedef void (C::* F)();
F p;
public:
mem_call_t( F ptr )
: p( ptr )
{
}

void operator() () const
{
(((C*)0)->*p)();
}

};

template<typename C>
mem_call_t<C> mem_call( void (C::*ptr)() )
{
return mem_call_t<C>( ptr );
}

void main() {
run( mem_call( &A::print ) );
}

};
caocheng8230 2006-12-23
  • 打赏
  • 举报
回复
class A
{ void print(){}
template<typename F>
void run( F func ) { func(); }

int main() {
typedef (A::*print)();
A a;
print p;
run((a.p)()); // error
}
}
也行.
caocheng8230 2006-12-23
  • 打赏
  • 举报
回复
class A
{ static void print(){}
template<typename F>
void run( F func ) { func(); }

int main() { run( A::print ); // error
}
}
就可以了.
cunsh 2006-12-23
  • 打赏
  • 举报
回复
stl忘了. Loki的Functor可以在这儿用
A a;
a.run( Loki::Functor<void>( &a, &A::print) );
cunsh 2006-12-23
  • 打赏
  • 举报
回复
不static的也可以传递啊
femalelover 2006-12-23
  • 打赏
  • 举报
回复
成员函数要做为参数传递的话, 必须是 static 修饰的.

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧