如果我有一个函数指针
MyFunctionPointer myFunctionPointer;
我可以传递像:
这样的参数myFunctionPointer(1,2);
我希望做类似的事情,但是在一个对象上调用一个特定的函数。我现在有这样的事情:
if(case1)
myObject.Case1();
else if(case2)
myObject.Case2();
相反,有没有办法做类似的事情:
myObject.myFunctionPointer();
谢谢,
大卫
答案 0 :(得分:3)
选中此项:http://www.goingware.com/tips/member-pointers.html。也许它可以帮到你?
引用:
class Foo
{
public:
double One( long inVal );
double Two( long inVal );
};
int main()
{
double (Foo::*funcPtr)( long ) = &Foo::One;
Foo aFoo;
double result =(aFoo.*funcPtr)( 2 );
}
答案 1 :(得分:1)
如果将函数指针声明为类的成员函数,则可以将函数指定给该成员函数,然后再调用该函数。
所以如果你在类中声明一个函数指针
int (*foo)(int) = NULL; // takes int arg, returns int
将方法分配给函数后,您可以根据需要调用它:
myObject.foo(42);
e.g。
class myfoo
{
public:
int (*foo)(int);
};
int myfoofunc(int n)
{
return n/2;
}
...
myfoo f;
f.foo = myfoofunc;
cout << f.foo(2) << endl; // would output 1
答案 2 :(得分:1)
如果两个成员函数具有相同的签名,则可以声明成员函数指针
return_type (CMyClass::*variable)(paramtype1, paramtype2) = &CMyClass::Case1;
并将其称为
return_type ret = (myObject.*variable)(param1, param2);