【发布时间】:2020-01-05 06:10:36
【问题描述】:
我有 grpc 服务,它包装了一些第三个库函数。被调用库的类是T_Upt。当从Status TerminalService::GetState 调用_upt->GetState 时,state 为空。如果我将_upt->GetState 调用移动到构造函数
TerminalService::TerminalService(): _upt(std::make_unique<T_Upt>())
{
T_UptState state{};
_upt->GetState(&state);
std::cout << state.cbTerminalID << std::endl;
}
那么一切都很好。比如为什么?我尝试了使用std::move 或T_Upt* 的不同方法,但没有任何效果。不确定它是否重要,但该库是单线程的,但这应该不是问题,因为我没有使用RegisterAsyncGenericService。
完整代码如下
服务.h
class TerminalService final : public TerminalGrpcService::Service
{
public:
TerminalService();
Status Cancel(ServerContext* context, const CancelRequest* request, CancelReply* response) override;
private:
std::unique_ptr<T_Upt> _upt;
};
服务.cpp
TerminalService::TerminalService(): _upt(std::make_unique<T_Upt>())
{
}
Status TerminalService::GetState(ServerContext* context, const ::GetStateRequest* request,
GetStateReplay* response)
{
T_UptState state{};
const bool result = this->_upt->GetState(&state);
response->set_result(result);
response->set_terminalid(std::string(state.cbTerminalID));
return Status::OK;
}
主要
int main()
{
const std::string address("127.0.0.1:1111");
TerminalService service;
ServerBuilder builder;
builder.AddListeningPort(address, grpc::InsecureServerCredentials());
builder.RegisterService(&service);
std::unique_ptr<Server> server(builder.BuildAndStart());
std::cout << "Server listening on port: " << address << std::endl;
server->Wait();
}
更新:使用静态(全局变量)也没有帮助,我迷路了。
【问题讨论】:
标签: c++ variables constructor grpc