首页 文章

VxWorks中的成员函数指针

提问于
浏览
1

我正在为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();

我真的非常不喜欢这两种解决方案 . Is there a clean, simple solution to this problem?

1 回答

  • 1

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

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

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

相关问题