gpt4 book ai didi

c++ - Apache thrift 和 cpp 代码生成

转载 作者:行者123 更新时间:2023-11-30 05:31:23 25 4
gpt4 key购买 nike

我正在学习 apache thrift 的教程:

https://svn.apache.org/repos/asf/thrift/attic/branches/0.9.x/tutorial/tutorial.thrift

它使用以下 shared.thrift:

https://svn.apache.org/repos/asf/thrift/attic/branches/0.9.x/tutorial/shared.thrift

我通过以下方式生成所需的 cpp 源文件:

thrift --gen cpp shared.thrift
thrift --gen cpp tutorial.thrift

它给了我一个 cpp 文件列表,在其中一个文件中我看到了以下内容:

class CalculatorHandler : virtual public CalculatorIf {
... }

在哪里

class CalculatorIf : virtual public  ::shared::SharedServiceIf {
... }

 class SharedServiceIf {
public:
virtual ~SharedServiceIf() {}
virtual void getStruct(SharedStruct& _return, const int32_t key) = 0;
};

由于 virtual void getStruct 是类中的纯虚函数,因此无法编译,但它定义于:

class SharedServiceHandler : virtual public SharedServiceIf {
void getStruct(SharedStruct& _return, const int32_t key) {
// Your implementation goes here
printf("getStruct\n");
}
}

这是编译错误:

Calculator_server.skeleton.cpp:49:63: error: cannot allocate an object of abstract type 'CalculatorHandler'
shared_ptr<CalculatorHandler> handler(new CalculatorHandler());
^
Calculator_server.skeleton.cpp:19:7: note: because the following virtual functions are pure within 'CalculatorHandler':
class CalculatorHandler : virtual public CalculatorIf {
^
In file included from Calculator.h:12:0,
from Calculator_server.skeleton.cpp:4:
SharedService.h:18:16: note: virtual void shared::SharedServiceIf::getStruct(shared::SharedStruct&, int32_t)
virtual void getStruct(SharedStruct& _return, const int32_t key) = 0;

那么问题来了:这是 thrift 的 CPP 代码生成器中的错误,它无法正确识别所需的基类,还是我做错了什么?

(这个问题不是关于修复 C++ 编译错误,因为这是所有由 thrift 生成的代码。这个问题是关于 thrift 的)

最佳答案

是的,骨架在服务继承方面存在问题。如果将该代码与 the code in the /tutorial/cpp folder of the source tree 进行比较你会看到一些显着的差异。

我有点犹豫是否建议完全不要使用骨架代码,但这可能是大多数人真正做的。他们使用源代码树教程和测试套件代码作为引用。事实上,C++ 是唯一生成骨架的目标语言。我认为这个事实本身就说明了很多。

关于c++ - Apache thrift 和 cpp 代码生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35573286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com