2016-08-19 39 views
0

我是gRPC的新手,並試圖在我現有的系統中使用它。但是,編譯時會出現這個未使用的參數錯誤。未使用的gRPC ServerContext

server_grpc.cc:100:39: error: unused parameter ‘context’[-Werror=unused-parameter] 
    Status MyFunc(ServerContext* context, const QueryRequest* request, 

可能在其他一些情況下使用上下文參數。但是,在簡單的hello world類型的例子中,它不被使用。有沒有辦法編譯協議緩衝區而不生成ServerContext參數?

我知道我可以讓編譯器忽略警告消息。但是,只是想知道是否可以在不影響我的系統正在編譯的方式下完成。

我想知道如何使用上下文?如果任何人都能指出如何使用這個上下文,那將是非常棒的。我可能會在我的工作中找到它的用處。

回答

0

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; 
    } 

這就是我如何會建議您在該特定情況下處理該警告,而不會導致整個項目未啓用警告。

+0

感謝您的解釋。希望gRPC文檔能夠更好地展示使用這種上下文的例子。 – damleak