调用对象上的特定函数(函数指针)

时间:2011-11-10 22:22:50

标签: c++

如果我有一个函数指针

MyFunctionPointer myFunctionPointer;

我可以传递像:

这样的参数
myFunctionPointer(1,2);

我希望做类似的事情,但是在一个对象上调用一个特定的函数。我现在有这样的事情:

if(case1)
  myObject.Case1();
else if(case2)
  myObject.Case2();

相反,有没有办法做类似的事情:

  myObject.myFunctionPointer();

谢谢,

大卫

3 个答案:

答案 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);