avrogencpp能为模式中的每种类型生成单独的头文件吗

can avrogencpp generate separate header file for each type in schema?

本文关键字:单独 文件 类型 种类 模式 avrogencpp      更新时间:2023-10-16

我有两种类型"Company"answers"User",都包括一个常见类型"Address",并且正在尝试生成cpp头文件。我尝试了多种方法,但最终在两个不同的头文件中多次定义了"Address"结构。avrogencpp能否为每种类型生成一个标头,而不是将所有内容都放在一个文件中?

这是我所能做到的:

1( 已创建示例.avdl

@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工具生成模式文件:avro-tools idl2schemata sample.avdl

3( 使用avrogencpp生成标头:

avrogencpp -i Address.avsc -o address.h
avrogencpp -i Employee.avsc -o employee.h
avrogencpp -i Company.avsc -o company.h

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

avrogencpp既不是一个智能程序,也不是Avro的整个C++API。对于正常的代码,几乎总是需要一些后处理技巧。

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

#include "address.h"

在顶部的includes中。(事实上,您可以用这个来替换生成的includes,因为每个生成的头文件都有相同的includes集。(