我是gRPC的新手,并试图在我现有的系统中使用它。但是,我在编译它时会得到这个未使用的参数错误。
server_grpc.cc:100:39: error: unused parameter ‘context’[-Werror=unused-parameter]
Status MyFunc(ServerContext* context, const QueryRequest* request,
可能在某些其他情况下使用context参数。但是,在简单的hello world
类型的示例中,它没有被使用。有没有办法编译协议缓冲区而不生成ServerContext
参数?
我知道我可以让编译器忽略警告消息。但是,只是想知道它是否可以在不影响我的系统正在编译的方式的情况下完成。
我想知道如何使用上下文?如果任何人都可以指出如何使用这个上下文,那将是很好的。我可能会在我的工作中找到它的用法。
答案 0 :(得分:1)
提供ServerContext
,以便为您获得的每个RPC添加上下文。它允许您调整RPC的某些方面,例如处理身份验证,或将响应中的元数据添加回客户端。显然,您可能需要或不需要该参数,具体取决于您的需求。
我们并不想为此专门添加一个选项,因为这样可以使代码和工具复杂化,效果不大,因此代码生成器和函数签名会强制您始终拥有该参数。现在这并不是什么大不了的事,因为在C ++中,您可以特别要求编译器忽略特定实例中的参数,例如:
Status SayHello(ServerContext* context, const HelloRequest* request,
HelloReply* reply) override {
(void) context; // ignore that variable without causing warnings
std::string prefix("Hello ");
reply->set_message(prefix + request->name());
return Status::OK;
}
这就是我建议您在该特定情况下处理该警告,而不会导致整个项目未启用警告。