C++ 从函数c+内的lambda函数返回一个值+;
我正在使用RabbiMQ(RPC),我想从lambda函数返回一个值。我从main.cpp调用此函数,但返回值不符合预期(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
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 abool 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;
}