首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >avrogencpp可以为schema中的每种类型生成单独的头文件吗?

avrogencpp可以为schema中的每种类型生成单独的头文件吗?
EN

Stack Overflow用户
提问于 2020-02-22 02:53:11
回答 1查看 259关注 0票数 1

我有两个类型"Company“和"User”,这两个类型都包含一个公共类型"Address",并且正在尝试生成cpp头文件。我尝试了多种方法,但最终在两个不同的头文件中重复定义了"Address“结构。avrogencpp是否可以为每种类型生成一个头文件,而不是将所有内容都放在一个文件中?

这就是我所能做到的:

1)创建sample.avdl

代码语言:javascript
复制
@namespace("test")
protocol Simple {
  record Address {
    string street;
    string state;
    string zip;
  }
  record Company {
    string name;
    Address address;
  }
  record Employee {
    string firstName;
    string lastName;
    Address address;
  }
}

2)使用avro-tools生成模式文件:avro-tools idl2schemata sample.avdl

3)使用avrogencpp生成headers:

代码语言:javascript
复制
avrogencpp -i Address.avsc -o address.h
avrogencpp -i Employee.avsc -o employee.h
avrogencpp -i Company.avsc -o company.h

现在,问题是employee.h和Comany.h都定义了struct Address,因此无法一起编译。

EN

回答 1

Stack Overflow用户

发布于 2021-03-30 09:33:56

avrogencpp不是一个聪明的程序,整个Avro的C++应用程序接口也不是很好的构思。对于正常的代码,几乎总是需要进行一些后期处理。

在这种情况下,最好的方法是编辑生成的company.hemployee.h文件:删除冗余代码( Addresscodec_traits<Address>结构)并插入

代码语言:javascript
复制
#include "address.h"

在顶部的包含项中。(实际上,您可以只用这一个替换生成的包含,因为每个生成的头文件都有相同的包含集。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60344685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档