我有一个库,用c ++ 11标准(至少)编写,我的编译器是c ++ 0x。 库包含一些函数,我必须恢复到c ++ 0x。 由于我没有使用lambda表达式的经验,因此我无法重写以下函数:
void EventTrace::connect(Connector& connector)
{
Connector::EventSignal& s = connector.getEventSignal();
connection_ = s.connect(
[this](int e)
{
if (decoders_.empty())
{
poco_information_f1(LOGGER(), "Event %d", e);
}
for (Decoder decoder : decoders_)
{
try
{
decoder(e);
}
catch (Exception& exception)
{
poco_warning_f1(LOGGER(), "EventTrace Decoder error %s", exception.displayText());
}
}
}
);
}
感谢任何帮助。
答案 0 :(得分:4)
一个lambda只是(在C ++中)一个带有operator()
的匿名结构/类的语法糖。
在pre-C ++ 11代码中,您可以用其中一个struct替换lambda,例如:
struct Foo {
Foo(EventTrace* e): e_(e) {}
void operator()(int t) {
// the inside of the lambda
// you just have to replace implicit usage of this by e_->...
}
};
void EventTrace::connect(Connector& connector)
{
Connector::EventSignal& s = connector.getEventSignal();
Foo f(this);
connection_ = s.connect(f);
}