1

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

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

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

    static void CallFunction1(SomeClass *objectToCallFunction1On);
    static void CallFunction2(SomeClass *objectToCallFunction2On);
    ...
    static void CallFunction30(SomeClass *objectToCallFunction30On);
    
    
    void Function1();
    void Function2();
    ...
    void Function30();
    
  2. 使用整数或枚举类型指定函数以调用特定对象:

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

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

4

1 回答 1

1

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

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

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

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

于 2013-04-15T02:34:06.133 回答