Возврат значения из лямбда-функции внутри функции c ++ - PullRequest
0 голосов
/ 05 июля 2018

Я работаю с RabbiMQ (RPC) и хочу вернуть значение из лямбда-функции. Я вызываю эту функцию из main.cpp, но возвращаемое значение не соответствует ожидаемому (значение внутри лямбда-функции соответствует ожидаемому). Каков правильный синтаксис для этого?

Мой код:

bool RabbitMqHandler::sendResultToUserCountService(analyze_result result, Camera *cam)
{
    std:: string queueName = "userCountServiceReceiveRPC" + std::to_string(cam->getUserGroupId());

    const std::string correlation("2");

    SimplePocoHandler handler("localhost", 5672);

    AMQP::Connection connection(&handler, 
                                AMQP::Login("localhost","123456!"),"/");

    bool isExist;
    AMQP::Channel channel(&connection);
    AMQP::QueueCallback callback = [&](const std::string &name,
                                       int msgcount,
                                       int consumercount)
    {

         ProtobufLPR::CarResult carResult;

         carResult.set_licensenumber(result.LicenseNumber);
         carResult.set_analyzetime(result.Date);

         std::string buf;
         carResult.SerializeToString(&buf);

         AMQP::Envelope env(buf);
         env.setCorrelationID(correlation);
         env.setReplyTo(name);
         channel.publish("", queueName, env);
         std::cout << "Requesting " << result.LicenseNumber << std::endl;
    };

    channel.declareQueue(AMQP::exclusive).onSuccess(callback);

    auto receiveCallback = [&](const AMQP::Message &message,
                               uint64_t deliveryTag,
                               bool redelivered) ->bool
    {
        if(message.correlationID() != correlation)
            return 1;

        std::cout<<"Got " << message.message() <<std::endl;
        handler.quit();
        istringstream(message.message()) >> isExist;
        return isExist;
      };

      channel.consume("", AMQP::noack).onReceived(receiveCallback);
      handler.loop();
}

1 Ответ

0 голосов
/ 05 июля 2018

Вот пример возврата значения из лямбда-функции. Живая демоверсия .

#include <iostream>
#include <iomanip>

int main() {
    auto greater_than_30 = [](int value) {
        return value > 30;
    };

    std::cout << "is 45 greater than 30? " << std::boolalpha
        << greater_than_30(45) << "\n";

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...