c – 使用boost :: bind和boost :: function作为回调的类成员函数

c – 使用boost :: bind和boost :: function作为回调的类成员函数,第1张

概述我正在设置一个成员函数作为我正在使用的C库的回调. C库设置如下的回调: typedef int (*functionPointer_t)(myType1_t*, myType2_t*, myType3_t*);setCallback(param1, param2, functionPointer, param4) 我想使用boost :: bind(如果可能的话)传入函数指针.我希望指向的函 我正在设置一个成员函数作为我正在使用的C库的回调. C库设置如下的回调:
typedef int (*functionPointer_t)(myType1_t*,myType2_t*,myType3_t*);setCallback(param1,param2,functionPointer,param4)

我想使用boost :: bind(如果可能的话)传入函数指针.我希望指向的函数是实例化类的成员,而不是静态成员.例如.

Class A { public:   A(); protected:  int myCallback(myType1_t*,myType3_t*); //aka functionPointer_t}

可以使用boost :: bind和boost :: function来完成吗?根据How can I pass a class member function as a callback?(第3个答案),我可以声明以下内容(某处或作为typedef):

boost::function<int (A*,myType1_t*,myType3*> myCallbackFunction

然后在A(ctor)中的某处调用boost :: bind在该类型上,并将其传递给C库调用.

这是可能的,还是我偏离基地?非常感谢.

解决方法 不.像boost :: function这样的Functor类型不会转换为与C回调机制一起使用的函数指针.

但是,大多数C回调机制都有某种令牌机制,因此您的回调函数(它是静态的)具有某种上下文信息.您可以使用它来编写一个包装类,将这些标记映射到仿函数对象,并将执行传递到右侧:

class CallbackManager {public:    typedef boost::function<int (type1*,type2*,type3*)> callback;    static voID setCallback(CallbackManager::callback cb)    {        voID *token = ::setCallback(staticCallback);        callbacks[token] = callback_I;    }    static voID staticCallback(voID* token,type1* a,type2* b,type3* c)    { return mcallbacks[token](a,b,c); }private:    static std::map<voID*,callback > callbacks;};
总结

以上是内存溢出为你收集整理的c – 使用boost :: bind和boost :: function作为回调的类成员函数全部内容,希望文章能够帮你解决c – 使用boost :: bind和boost :: function作为回调的类成员函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1241825.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存