我有一个C ++'库',它由一组可重复使用的类组成,这些类是模板化的(即所有源代码都在头文件中)和一组驱动程序文件。每个驱动程序源文件都包含一些(但不一定是所有)带有类模板的标头。
如果我可以使用特定的模板参数(在编译时知道)在每个驱动程序文件中实例化这些类模板,然后通过读取配置文件自动初始化具有实例化类型的对象,这将是很好的(这将帮助我删除一些样板代码)。在构造对象时将读取这些配置文件。
假设配置文件将与源代码捆绑在一起。编译驱动程序时应将它们放在何处,以便每个类可以找到其配置文件?我正在使用CMake构建代码。
由于可重用代码未编译到库中,因此无法将配置文件放在与库相同的位置。我甚至不确定这实际上是不是一个好主意。
一种解决方案是将配置文件指定为CMake变量,并在每个可配置类的源代码中对此值进行硬编码。有没有更好的方法呢?也许有一种标准的CMake式方式来处理这个问题?
答案 0 :(得分:0)
我会考虑用好的宏来做这件事。您可以使用target_compile_definitions()
在源代码中定义宏。然后,您的配置文件可能是CMake文件本身,加载include()
。然后在源文件中,您可以对MyTemplateClass<TEMPLATE_ARG_MACRO_1, TEMPLATE_ARG_MACRO_2>
执行显式模板特化或typedef。
希望这是有道理的。