繁体   English   中英

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

[英]C++ How do you pass a member function into a functor parameter?

我正在使用 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 我真的想使用一个函数(因此,最终我可能能够传入一个外部函数)。

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

" Any type whose instances that can be called with a no-argument function call (ie 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 "

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

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

您可以使用std::bind (请参阅http://en.cppreference.com/w/cpp/utility/functional/bind

dds::sub::cond::ReadCondition rc(*mp_reader,
                                 dds::sub::status::DataState::any(),
                                 std::bind(&MyClass::do_stuff, this));

另请参阅如何将成员函数直接绑定到 Visual Studio 11 中的 std::function?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM