VxWorks 中的成员函数指针

Posted

技术标签:

【中文标题】VxWorks 中的成员函数指针【英文标题】:Member Function Pointers in VxWorks 【发布时间】:2013-04-15 02:21:20 【问题描述】:

我正在为 VxWorks 应用程序编写 C++。由于 VxWorks 是基于 C 的,以函数指针作为参数的函数与 C++ 的成员函数指针不兼容。

我有一个类 (SomeClass),它使用 30 多个成员函数进行了多次实例化,我希望能够将它们传递给像 taskSpawn 这样的函数。我知道这可以有两种实现方式,但我不是特别喜欢这两种传统解决方案:

    使用静态函数调用特定对象上的 C 函数指针:

    static void CallFunction1(SomeClass *objectToCallFunction1On);
    static void CallFunction2(SomeClass *objectToCallFunction2On);
    ...
    static void CallFunction30(SomeClass *objectToCallFunction30On);
    
    
    void Function1();
    void Function2();
    ...
    void Function30();
    

    使用整数或枚举类型指定函数以调用特定对象:

    static void CallFunction(SomeClass *objectToCallFunctionOn, int functionToCall);
    
    void Function1();
    void Function2();
    ...
    void Function30();
    

我真的,真的不喜欢这两种解决方案。 这个问题有干净、简单的解决方案吗?

【问题讨论】:

【参考方案1】:

第一个选项是使用函数指针数组。

static void (*functionArray[30])(SomeClass *) = 
    Function1,
    Function2,
    Function3,
    Function4
    //
;

static void CallFunction(SomeClass *objectToCallFunctionOn, int functionToCall) 
   functionArray[functionToCall](objectToCallFunctionOn);


另一个选择是对非类型模板参数做同样的事情。但我认为第一个选项可以公平地解决问题。

【讨论】:

以上是关于VxWorks 中的成员函数指针的主要内容,如果未能解决你的问题,请参考以下文章

C++中怎么获取类的成员函数的函数指针

this指针

从 C++ 的成员函数中获取指向成员函数的指针

C++函数指针与成员函数指针

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合

如何通过保存在容器中的成员指针函数调用?