首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类的成员函数可否作为函数的参数?解决方案

2012-03-22 
类的成员函数可否作为函数的参数?有一点毫无疑问,也就是函数的参数可以是指针而且该指针还能够指向某个函

类的成员函数可否作为函数的参数?
有一点毫无疑问,也就是函数的参数可以是指针而且该指针还能够指向某个函数。
现在问题是,该指针是否能指向某个类的成员函数。
  书上说,指向类成员函数的函数指针,实际上是一个偏移地址而不是实际的地址,很明显与一般的自由函数不同。
  我尝试了很久,也没有找到合适的方法,大伙帮忙看看!

[解决办法]
作为成员函数是为了限制权限。如果外部这样调用还不如写成全局函数。
[解决办法]
以下是个简单的例子

C/C++ code
#include <iostream>#include <vector>using namespace std;class Object{public:    Object(int value):m_value(value){}    bool BiggerThan(int rhs)    {        return m_value > rhs;    }    int Value() const{return m_value;}private:    int m_value;};template<class T>void bt(vector<T> arrObj, bool (T::*func)(int), int dst){    typedef vector<T>  ArrT;    for(ArrT::iterator itr = arrObj.begin(); itr != arrObj.end(); ++itr)    {        T* obj = &*itr;        if((obj->*func)(dst))            cout << (*itr).Value() << '\t';    }    cout << endl;}void test(){    vector<Object> arrObj;    for(int i = 0; i < 10; i++)        arrObj.push_back(Object(i));    bt(arrObj, &Object::BiggerThan, 2);}void main(){    test();}
[解决办法]
一个简单的static成员函数就搞定了,何必复杂化。

热点排行