VxWorks 中的成员函数指针

     2023-02-22     170

关键词:

【中文标题】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);


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

【讨论】:

层次结构中的成员函数指针

】层次结构中的成员函数指针【英文标题】:Memberfunctionpointersinahierarchy【发布时间】:2010-04-0817:51:36【问题描述】:我正在使用一个定义接口的库:template<classdesttype>voidconnect(desttype*pclass,void(desttype::*pmemfun)());我有一个小的... 查看详情

如何通过保存在容器中的成员指针函数调用?

】如何通过保存在容器中的成员指针函数调用?【英文标题】:Howtocallthroughpointer-to-memberfunctionsavedinacontainer?【发布时间】:2019-11-1122:44:47【问题描述】:我正在尝试编写一个成员函数,它依次调用同一对象的其他成员函数,直... 查看详情

如何将成员函数指针传递给模板函数中的重载方法?

】如何将成员函数指针传递给模板函数中的重载方法?【英文标题】:Howtopassamemberfunctionpointertoanoverloadedmethodinatemplatefunction?【发布时间】:2011-06-1704:59:19【问题描述】:我提到了这个somewhatsimilarquestion。但是这里的情况不同:st... 查看详情

多次调用构造函数会改变C++中的成员指针地址

】多次调用构造函数会改变C++中的成员指针地址【英文标题】:MultiplecallingconstructorwillchangethememberpointeraddressinC++【发布时间】:2019-03-0805:38:08【问题描述】:我写了一个程序检查类创建的init过程,发现多次调用构造函数改变了... 查看详情

将类的成员函数分配给 C++ 中的函数指针

】将类的成员函数分配给C++中的函数指针【英文标题】:Assigningaclass\'smemberfunctiontoafunctionpointerinC++【发布时间】:2020-04-2904:28:54【问题描述】:我已将函数分配给变量p_samplen_->onData=onData;PVOIDonData(PVOIDargs)它成功了。我试图将... 查看详情

通过VC++中的A类函数指针调用(B类的)类成员函数

】通过VC++中的A类函数指针调用(B类的)类成员函数【英文标题】:Callingclassmemberfunction(ofclassB)thrutheclassAfunctionpointerinVC++【发布时间】:2015-01-1014:10:08【问题描述】:让我通过一个示例来解释我的问题(使用VS2013的VC++代码)。v... 查看详情

this指针

this指针时一个隐含于每一个类的成员函数中的特殊指针(包括构造函数和析构函数),它用于指向正在被成员函数操作的对象。this指针明确地指出了成员函数当前所操作的数据所属的对象。实际过程是,当通过一个对象调用成... 查看详情

如何修改静态成员函数中的变量?

】如何修改静态成员函数中的变量?【英文标题】:Howcanimodifyvariablesinstaticmemberfunction?【发布时间】:2019-07-1706:50:10【问题描述】:我在下面有一段代码,我想在静态函数中修改类的变量,但出现了一些错误。如何用“this”指... 查看详情

未定义符号,使用指针 C++ 访问成员函数

...C++【发布时间】:2013-03-0312:08:19【问题描述】:我想从lib中的一个类中使用指针访问我的主类的成员函数。我可以访问主类中的公共变量。但是当我尝试访问成员函数(公共)时,我有这个错误:./Panda:symbollookuperror:libkoala.so:un 查看详情

从 C++ 的成员函数中获取指向成员函数的指针

...试编写的程序中,我需要能够获得指向同一类的成员函数中的成员函数的指针。指针需要作为void(*)()传递给函数。示例://CallFunctakesavoid(*)()argumentclasste 查看详情

唯一标识指向成员函数的指针的方法?

...成员函数的指针时遇到了麻烦。我希望能够通过调用基类中的CoStart和CoStop方法来启动和停止“行为”派生类中的协程,这些方法采用指向成员函 查看详情

我应该如何将指向成员函数的指针传递给 OpenCV 中的 setMouseCallback?

】我应该如何将指向成员函数的指针传递给OpenCV中的setMouseCallback?【英文标题】:HowshouldIpassapointer-to-member-functiontosetMouseCallbackinOpenCV?【发布时间】:2016-06-1315:15:41【问题描述】:如何调用setMouseCallback类中定义的OnMouse?通常是... 查看详情

C++成员函数指针指向全局函数指针

...6-09-1921:04:55【问题描述】:至少对我来说,我必须解决C++中的一个棘手问题。有一个我无法修改的dll。它获取一个函数指针作为参数。如果我将指针传递给全局函数,一切正常。不幸的是,有一个要传递给dll的相同类对象的列表... 查看详情

11.9c++对象指针(代码片段)

...初始地址的指针变量就是指向对象的指针变量,对象中的成员也有地址,存放对象成员地址的指针变量就是指向对象成员的指针变量。1、指向对象数据成员的指针 定义指向对象数据成员的指针变量的方法和定义指向普... 查看详情

指向带有 boost::variant 的成员函数的指针

...指向成员函数的“通用”指针,该指针可用于访问特定类中的各种成员函数,如下所示:classSecurityinlinestd::vector<double>member_function(con 查看详情

this指针(代码片段)

...前对象的地址,指向当前对象,通过this指针可以访问类中的所有成员。1)每个对象都有this指针,通过this来访问自己的地址。2)每个成员函数都有一个指针形参(构造函数没有这个形参),名字固定,称为this指针,this是隐式... 查看详情

指向父类成员函数的函数指针

...间】:2010-12-0813:10:19【问题描述】:我一直在尝试理解C++中的函数指针,以便我可以在我的一个项目中成功地使用它们。我遇到了一个逻辑问题。假设我们有两个类:一个父类和一个继承父类的子类。classParent...otherstuffvoid(Parent:... 查看详情

获取vb类模块成员函数指针(转)

最近在做一些VB6、VBA的项目,被如何获取类模块中的函数指针这个问题所困扰,收集整理后,有2分资料值得收藏,特将关键部分留存,以备后续查找。参照连接1:http://www.cnblogs.com/pctgl/articles/1352916.html参照连接2:http://blog.csdn.ne... 查看详情