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

Call a particular function (function pointer) on an object

本文关键字:函数 指针 对象 调用      更新时间:2023-10-16

如果有一个函数指针

MyFunctionPointer myFunctionPointer;

我可以给它传递如下参数:

myFunctionPointer(1,2);

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

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

是否可以这样做:

  myObject.myFunctionPointer();

?

谢谢,大卫

检查: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 ); 
}

如果将函数指针声明为类的成员函数,则可以将函数赋值给该成员函数,然后再调用该函数。

如果你在你的类中声明了一个函数指针

int (*foo)(int) = NULL; // takes int arg, returns int

一旦你把方法赋值给一个函数,你就可以随心所欲地调用它了:

myObject.foo(42);

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

如果两个成员函数具有相同的签名,则可以声明成员函数指针

return_type (CMyClass::*variable)(paramtype1, paramtype2) = &CMyClass::Case1;

并将其命名为

return_type ret = (myObject.*variable)(param1, param2);