成员函数指针


c++中成员函数的指针:
class Math
{

public
:
double
mul(int a, int b)
{

return
a/(double)b;
}
};


int
main(void)
{

typedef
double(Math::*MFPointer)(int,int);
MFPointer mp=&Math::mul;

Math math;
(
math.*mp)(3,277);
}

这段代码是没什么问题的,即使在 gcc-2.95.4上都能编译。
但是,如果想把成员变量指针放入STL的容器(比如vector)里,gcc-2.95.4就编不过去了,说是STL里面拿address的时候晕倒,没办法拿。想用void*糊弄一下编译器,它还不干,不准把MFPointer转为void*再塞进去。
真是有够老土的。

相关文章

分类

1 Comments

devin周 said:

你好,根据你的例子的启发,其实可以先把成员变量赋值给一个函数指针,再用函数指针声明一个vector, 就可以用这个vector来保存类的成员变量了. 谢谢了.
--------------------------------------------
#include
#include

using namespace std;

class Math
{
private:
double offset;
public:
Math():offset(100.0){}
double mul(int a, int b)
{
return (a/(double)b + offset);
}
};

int main(void)
{
typedef double(Math::*MFPointer)(int,int);
MFPointer mp=&Math::mul;
Math math;
printf("%lf\n",(math.*mp)(500,5));

vector vec_fun;

vec_fun.push_back(mp);

--------
MFPointer test = *vec_fun.begin();
printf("%lf\n",(math.*test)(500,5));
return 0;
}

--------------------------------------------------------------------
user_00@ISD42_78_sles10:~/devin$ g++ test.cpp -o test
user_00@ISD42_78_sles10:~/devin$ ./test
200.000000
200.000000

留言:

关于文章

This page contains a single entry by DongHao published on 01 13, 2007 4:12 AM.

坦诚 was the previous entry in this blog.

应届毕业生 is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.