这一定是一个普通的问题,但我找不到。你能指出我正确的方向或描述你做了什么来确保你的C ++模板都经过测试。
在新项目中,所有代码都必须使用单元测试进行测试,以及代码审查等其他措施。现在开发的程序确保没有代码可以不经过测试。
对于C ++模板,我看到两种可能性:
解决方案2的一个问题是模板源文件必须包含具有客户端类型定义的头文件。这感觉就像是依赖的倒置。
该项目有"核心"各种专用模块使用的库部件。库标题将存在于所有模块包含的中心位置。
如果库将其部分功能实现为模板,并且这些模块由专用模块使用,则库源文件必须包含模块的一些专用头,如果其中定义的某些类用作模板参数。
这是可能的,但感觉就像一团糟。你是怎么解决的?
编辑1:
示例澄清我的目标:我希望在我的软件开发过程中有严格的规则,确保没有模板实例化因疏忽而未经测试:(上面给出的两个示例规则是实现此目的的可能规则)
假设我有
template <class T>
class klass {
...
method1()
};
我知道我需要模板实例化,例如klass<uint16_t>
或klass<uint32_t>
,我对这些实例化进行了单元测试。
我想用我的流程阻止的是某些模块开发人员还使用了从未测试过的klass<uint8_t>
。
要求显式模板实例化为我实现这一目标。如果用客户端模块定义的类替换uint16_t
,uint32_t
,问题就是它会很快变得混乱。 some_data_class_defined_by_module_posterize_t
。
具体来说,需要在库源文件klass.cpp中包含客户端头以便能够实例化模板。我并不担心在单元测试中包含这些头文件。包括测试中的标题是单元测试中的标准业务。
有更好的解决方案吗?或者我必须忍受这个混乱?