我想使用thrift远程进程调用模板C ++函数,是否支持thrift?
如果是的话,在这种情况下如何编写一份节俭描述文件?
答案 0 :(得分:0)
C ++中的模板在编译时使用类型进行实例化,因此无法允许用户在运行时提供MyOwnType
。在代码执行期间需要进行一些奇怪的重新编译和重新加载代码......
因此,通常不支持为用户提供在服务器端实例化模板的可能性。
进一步模式 - Thrift旨在支持跨平台通信。想象一下,PHP客户端尝试使用PHP中定义的类来实例化一些C ++模板...
另外 - 请记住安全问题 - 传递任何代码在服务器端执行(模板实例化实际上是代码执行的形式),而不进行验证只是一个坏主意。
在Thrift中,您可以使用通用vector
或map
来定义特定类型,但函数需要是特定的,而不是通用的。
您可以使用您想要支持的所有类型定义尽可能多的功能。您甚至可以考虑从您想要支持的类型列表中创建一些生成Thrift IDL的脚本。
或者您可以使用Thrift union
类型或optional
字段来创建“变体”类型:
union Arg {
1: optional Type1 t1; // not sure if union works well enough...
2: optional Type2 t2;
}
void genericFun(1: Arg a);
恕我直言:看起来你想创建“做所有事情”类型的服务器,这很少是一个好主意 - 选择你的服务器 做什么做得好。