我有一个实现类“好极了”,并具有以下结构的父包:组织类似模板的代码,而在C++模板
parent/include/goody.h
parent/src/goody.cpp
这个包是使用几个孩子包child_1与结构child_n
child_i/include/child_details.h
child_i/src/main.cpp
其中main.cpp使用'goody'。重要的部分是child_details.h向父母提供了实施'goody'所需的信息。 goody.h lookes类似:
#include "child_details.h"
class goody
{
double arr_[child_details::num_elements];
}
其中“num_elements”是一个常量,需要在编译时是已知的。 (a)我不想在每个child_i包中添加特化和(b)'num_elements'遍布整个地方在父包中,并需要大量特定于模板的代码,这是我想避免的。
因此,我的问题是:什么是一个干净的方式来组织我的软件包与CMake?我无法编译父级内的父包,因为每个孩子都会有一个'goody'的实例。另一方面,我想避免编译父内部的所有这些实例,因为父母不应该知道孩子。是否有像我可以在父包内生成的未编译对象,然后必须在每个子包中进行编译?
只是为了明确一件事:每个孩子最终在一个单独的可执行文件,对吧?因为如果你将两个不同数量的元素连接在一起的孩子,你会违反[ODR](http://en.wikipedia.org/wiki/One_Definition_Rule),使整个事情成为非法的C++。 – Angew
您正在为每个孩子_anyway_添加单独的专业化,因为您必须为每个不同的“child_details.h”单独编译它。 –
@Angew每个孩子是一个单独的包,并有自己的make.cpp和它自己的child_details.h。 – Alex