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

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

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

【问题讨论】:

    标签: c++ vxworks member-function-pointers


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多