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 中的成员函数指针的主要内容,如果未能解决你的问题,请参考以下文章