【问题标题】:can avrogencpp generate separate header file for each type in schema?avrogencpp 可以为模式中的每种类型生成单独的头文件吗?
【发布时间】:2020-06-06 05:45:01
【问题描述】:

我有两种类型“公司”和“用户”,都包括一个通用类型“地址”,并且正在尝试生成 cpp 头文件。我尝试了多种方法,但最终在两个不同的头文件中多次定义了“地址”结构。 avrogencpp 可以为每种类型生成一个标头,而不是将所有内容都放在一个文件中吗?

这是我能做到的:

1) 创建了 sample.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-tools 生成架构文件: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,因此无法一起编译。

【问题讨论】:

    标签: c++ apache-kafka schema avro avro-tools


    【解决方案1】:

    avrogencpp 既不是一个聪明的程序,也不是为 Avro 设计的整个 C++ API。健全的代码几乎总是需要一些后处理技巧。

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

    #include "address.h"
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 2013-03-14
      • 2021-12-05
      • 1970-01-01
      • 2021-03-23
      相关资源
      最近更新 更多