【发布时间】:2018-03-06 18:39:17
【问题描述】:
我正在使用 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 类型的内容:
“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”
【问题讨论】:
-
Functor的类型是什么?它是模板参数吗?是类类型吗? -
@FrançoisAndrieux 据我所知,它是任何返回 void 的函数(例如
void f())。我将添加到 ReadCondition() 构造函数的链接.... -
解决你的问题取决于
Functor是否是模板参数。 -
可以用
do_stuff()代替[this](){ this->do_stuff(); }吗? -
@G.M.当我使用使用 mp_reader 的 lambda 编译时,我得到编译器错误:
a lambda capture variable must be from an enclosing function scope...这是我对该错误消息的解释:p
标签: c++ functor member-functions