0
点赞
收藏
分享

微信扫一扫

【第二十章:Sentosa_DSML社区版-机器学习之自动建模】

Xin_So 2024-09-25 阅读 17

c语言如何回调c++非静态成员函数?

如何将c++成员函数作为回调函数,传递给c语言调用?

最开始直接将类成员函数指针强转为普通的函数指针,发现在某些平台编译器会报错。

最终发现如下方式可以骗过编译器,不再报错。

在ubuntu、安卓、MTK LINUX测试未发现问题。


 

template <typename MessageT>

std::shared_ptr<StickyPublisher<MessageT>> NewStickyPublisherImpl(
                            const std::string &topic_name, const std::string &topic_type) {

    std::shared_ptr<StickyPublisher<MessageT>> puber =                             
                                           std::make_shared<StickyPublisher<MessageT>>();
    
    //cheat compiler
    union    
    {

        void(* c_cbk)(void* param,dds_addr_u *const , uint32_t );//第一个参数用于传对象指针


        void(StickyPublisher<MessageT>::*cpp_cbk)(dds_addr_u *const , uint32_t);

    }cbk;

    cbk.cpp_cbk = &StickyPublisher<MessageT>::PubMsgPeer;

    int32_t ret = DoRegPub(&(puber->puber_),topic_name.c_str(), topic_type.c_str(),        
                                (new_sub_cbk_t)cbk.c_cbk,puber.get() );

    if (kDdsRetOK != ret) {

        byd_cf_assert(kDdsRetOK == ret);

        return nullptr;

    }

    puber->mTop = topic_name;

    puber->mTop_typ = topic_type;

    puber->nid = GetNid();

    return puber;

}
举报

相关推荐

0 条评论