请参阅此主题和相关
示例.建议是在(在此示例中)添加一个bool
参数,实例化两个对象,一个用于,一个用,并且每个对象请求一个不同的RPC.CallData
hello_
CallData
hello_ =
true
hello_ = false
if (hello_) {
service_->RequestSayHello(...);
} else {
service_->RequestSayBye(...);
}
对于两种以上类型的调用,您可以使用enum
而不是a 来实现相同的行为bool
.
一种更灵活的方法是CallData
为每个RPC 设置一个不同的类.但是,当您从中获取标记时cq_->Next()
,您知道它是指向其中一个类的对象的指针,但您不知道它的确切类型.为了解决这个问题,你可以让它们都从具有虚拟Proceed()
成员函数的类继承,在每个子类中根据需要实现它,当你得到一个标记时,将它转换为CallData
并调用Proceed()
.
class CallData {
public:
virtual void Proceed() = 0;
};
class HelloCallData final : public CallData {...};
class ByeCallData final : public CallData {...};
...
new HelloCallData(...);
new ByeCallData(...);
cq_->Next(&tag, &ok);
static_cast(tag)->Proceed();
...