其他分享
首页 > 其他分享> > C如何将成员函数传递给函子参数?

C如何将成员函数传递给函子参数?

作者:互联网

我正在使用TRI DDS-这是我尝试调用的函数的原型:

template<typename T , typename Functor >
dds::sub::cond::ReadCondition::ReadCondition  (
  const dds::sub::DataReader< T > &  reader,  
  const dds::sub::status::DataState &  status,  
  const Functor &  handler  
)

所以我有一个看起来像这样的类(省略了无关紧要的内容):

MyClass test{
public:
    test(){... mp_reader = ...}; // not complete

    start_reader()
    {
        dds::sub::cond::ReadCondition rc(*mp_reader,
                                         dds::sub::status::DataState::any(),
                                         do_stuff());  // This does not work
    }

    void do_stuff() {...}
private:
    dds::sub::DataReader* mp_reader;

}

因此,我只是尝试传入函数do_stuff()..我知道这是行不通的,但是我不确定在什么地方代替const&函子参数.我可以传递成员函数吗? -如何指定类的实例?

我尝试在其中放置一个lambda并成功-但是我无法在lambda中访问mp_reader,因为它不在lambda的范围内.但是无论如何,我真的不想使用lambda,而我真的想使用一个函数(因此,最终我可能可以传入一个外部函数).

RTI DDS功能请参阅here.这是关于函子类型的说明:

“任何类型的实例都可以使用无参数的函数调用来调用(例如,如果f是Functor的实例,则可以调用f().)示例包括函数,覆盖operator()的类型和lambdas<< C 11>.返回类型必须为空”

解决方法:

您可以将lambda函数与捕获一起使用.

dds::sub::cond::ReadCondition rc(*mp_reader,
                                 dds::sub::status::DataState::any(),
                                 [this](){ this->do_stuff(); });

标签:member-functions,c,functor
来源: https://codeday.me/bug/20191014/1911655.html