gpt4 book ai didi

c++ - VxWorks 中的成员函数指针

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:16 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

关于c++ - VxWorks 中的成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16006743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com