读书人

怎么把一个类的非STATIC成员函数当作参

发布时间: 2012-02-05 12:07:14 作者: rapoo

如何把一个类的非STATIC成员函数当作参数传递给模板函数
template <class F>
void func(F f)
{
f();
}

class A{
private:
void f(){cout < < "ffff " < <endl;}
public:
void zw(){func(f);}
};

这样写编译不过.
如何把一个类的非static成员函数当作参数传递给模板函数

[解决办法]
晕,去看看C++必知必会-条款18:函数对象.
函数对象也称为仿函数,通过重载operator()来达到类似函数调用的方式使用对象.
其本质就是object.operator()
[解决办法]
这样是不是只能绑定foo类型?
感觉适应性太差了

==========================================
你的要求是类的非静态成员函数。
要调用一个类的非静态成员函数,要有this指针。
所以只能定义一个类对象。
[解决办法]
这样是不是只能绑定foo类型?
感觉适应性太差了
============

非static成员函数不能f()调用. 要指定this是谁. 要多一个参数. 例如:
template <class T, class PMemFun>
void func(T& obj, PMemFun pmemfun) {
(obj.*pmemfun)();
}

class A{
private:
void f(){cout < < "ffff " < <endl;}
public:
void zw(){func(*this, &A::f);} //指出this是谁.
};

在Loki库中有现成的 仿函数 的模板 Functor . 楼主参考.

读书人网 >C++

热点推荐