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

时间:2018-03-06 18:39:18

标签: c++ functor member-functions

我正在使用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 & functor参数。我可以传递成员函数吗? - 如何指定类的实例?

我尝试在那里放一个lambda并且它有效 - 但是我无法在lambda中访问mp_reader,因为它不在lambda的范围内。但无论如何我不想使用lambda我真的想要使用一个函数(所以,最终我可以传入一个函数)。

请参阅here了解RTI DDS功能。以下是关于functor类型的说法:

&#34; Any type whose instances that can be called with a no-argument function call (i.e. f(), if f is an instance of Functor). Examples are functions, types that override the operator(), and lambdas <<C++11>>. The return type has to be void&#34;

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)