如何在不使用lambda表达式的情况下重写函数?

时间:2017-05-29 15:43:49

标签: c++ c++11 lambda

我有一个库,用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());
                }
            }
        }
    );
}

感谢任何帮助。

1 个答案:

答案 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);
}