【发布时间】:2013-10-03 13:11:18
【问题描述】:
我正在使用 C++11 开发一个大型软件基础架构,该基础架构广泛使用可变参数模板。我的问题如下:这种方法的可扩展性是什么?首先,可变参数模板可以采用的参数数量是否有上限?其次,当使用许多参数时,代码膨胀是否是最先进的编译器的主要问题(并且,通过扩展,这些参数的许多组合会产生模板化方法的许多不同实现)?
【问题讨论】:
-
理论上没有限制,但显然在实践中存在一些限制,由一些有限的资源(如 RAM)决定。如果你达到了这个限制很重要的地步,你可能会遇到更大的问题,所以我不会担心那个。
-
您的第二个问题很难回答,因为它更多地取决于代码的其余部分,而不是模板参数的数量。如果您使用许多模板参数来计算东西的编译时间,则可能不会生成任何代码。否则,如果正在生成代码,则实例化的数量将是一个乘法因素。这与非可变模板没有什么不同。
-
C++11 标准的附录 B(实现数量)没有具体说明 variadic 模板,但它建议至少有 256 个函数参数和 1024 个模板参数。但是,当您的名称过长时,您可能会更早遇到问题。
-
编译器使用的模板参数有一个默认限制。您可以在 clang 和 gcc 上通过
-ftemplate-depth-<number>进行配置。还有-fconstexpr-depth=<number>。我自己无法对这两个进行太多调整。
标签: c++ c++11 scalability variadic-templates