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
)
所以我有一个 class 看起来有点像这样(省略了很多不相关的东西):
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
范围。我可以传递一个成员函数吗? - 如何指定 class?
的实例
我尝试在其中放置一个 lambda,它起作用了 - 但我无法访问 lambda 中的 mp_reader,因为它不在 lambda 的范围内。但无论如何我真的不想使用 lambda 我真的想使用函数(所以,最终我可能能够传入一个外部函数)。
请参阅 here 了解 RTI DDS 功能。这是关于 functor
类型的内容:
"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
"
您可以将 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));
另见 How to directly bind a member function to an std::function in Visual Studio 11?
我正在使用 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
)
所以我有一个 class 看起来有点像这样(省略了很多不相关的东西):
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
范围。我可以传递一个成员函数吗? - 如何指定 class?
我尝试在其中放置一个 lambda,它起作用了 - 但我无法访问 lambda 中的 mp_reader,因为它不在 lambda 的范围内。但无论如何我真的不想使用 lambda 我真的想使用函数(所以,最终我可能能够传入一个外部函数)。
请参阅 here 了解 RTI DDS 功能。这是关于 functor
类型的内容:
"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
"
您可以将 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));
另见 How to directly bind a member function to an std::function in Visual Studio 11?