Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从函数c+内的lambda函数返回一个值+;_C++_Lambda_Rabbitmq - Fatal编程技术网

C++ 从函数c+内的lambda函数返回一个值+;

C++ 从函数c+内的lambda函数返回一个值+;,c++,lambda,rabbitmq,C++,Lambda,Rabbitmq,我正在使用RabbiMQ(RPC),我想从lambda函数返回一个值。我从main.cpp调用此函数,但返回值不符合预期(lambda函数中的值符合预期)。这个的正确语法是什么 我的代码: bool RabbitMqHandler::sendResultToUserCountService(analyze_result result, Camera *cam) { std:: string queueName = "userCountServiceReceiveRPC" + std::t

我正在使用RabbiMQ(RPC),我想从lambda函数返回一个值。我从main.cpp调用此函数,但返回值不符合预期(lambda函数中的值符合预期)。这个的正确语法是什么

我的代码:

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();
}
bool RabbitMqHandler::sendResultToUserCountService(分析结果,摄像头*cam)
{
std::string queueName=“userCountServiceReceiveRPC”+std::to_string(cam->getUserGroupId());
常量std::字符串相关(“2”);
SimplePocoHandler处理程序(“本地主机”,5672);
AMQP::连接和处理程序,
AMQP::Login(“localhost”,“123456!”),“/”;
布尔是存在的;
AMQP::通道和连接;
AMQP::QueueCallback callback=[&](常量std::string&name,
int msgcount,
整数(消费者计数)
{
ProtobufLPR::CarResult-CarResult;
carResult.set_licensenumber(结果licensenumber);
carResult.set_分析时间(结果日期);
std::字符串buf;
carResult.SerializeToString(&buf);
AMQP::信封环境(buf);
环境setCorrelationID(相关性);
环境setReplyTo(名称);
channel.publish(“”,queueName,env);

std::cout这里是一个从lambda函数返回值的示例。

#包括
#包括
int main(){
自动大于\u 30=[](整数值){
返回值>30;
};

std::cout从lambda返回内容的语法是
return…;
就像您正在做的那样。请尝试创建一个。无法知道这有限的信息有什么问题。可能您希望从lambda中返回
sendResultToUserCountService
。最简单的方法可能是eclare a
bool ret=false;
在外部函数中,从lambda内部修改它,并在外部函数中修改
return ret
。lambda函数中打印的值与返回的值不同吗?请让isExist检查一下。也许您不需要使用[&],而只需使用[]?您的
receiveCallback
lambda可能是在返回
sendResultToUserCountService
后调用的,通过引用捕获本地堆栈变量
isExist
[&]
)将导致挂起引用,因此您在lambda中返回一些垃圾。@yussuf回调很可能是从
handler.loop()
中调用的,在这种情况下,引用不是问题,但我对RabbitMQ不够熟悉,无法确定。
#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;
}