![](/img/trans.png)
[英]C++: Using a template parameter as a default argument in a template function
[英]C++: Function argument or template parameter
我有一个 class myclass
,它依赖于一些int
来设置向量成员的大小。 我可以将其实现为非类型模板参数
template<int sz>
class myclass {
...
或者
class myclass {
...
然后在构造函数或其他 class 方法中简单地使用sz
作为参数。
两者都可以在很多情况下工作。 在其他一些情况下(例如,如果myclass
使用sz
作为非类型模板参数来引用其他模板化类或函数),则只有第一个选项有效。 在两者都可以工作的情况下,偏爱其中一个的可能原因是什么?
除了我未来的新编码之外,这也会影响我对已有代码的处理方式……是努力将一种实现类型“转换”为另一种,还是保持现状。
我不仅要询问差异(例如,编译时分配与运行时分配),还要询问这些差异如何使一个或另一个选项更可取。
首先,重叠(“两者都可以工作”)比您想象的要小。 您不能制作包含class 模板的各种专业化的容器(缺少类型擦除技巧)。 任何使用myclass
作为参数或返回类型的 function 如果myclass
是模板,则必须命名专业化或模板化自身。 仅当大小是常量表达式时,即使是纯本地使用也会重叠。
如果这些问题都没有强迫您处理,那么也会对性能产生影响。 使用 class 模板的多个实例化可能会增加二进制大小,尽管积极的内联可能会降低成本。 使用运行时参数可能会引入额外的运行时开销,尽管积极的内联也可能会减少这种开销。 您也无法避免使用单一类型进行堆分配(除非您施加最大容量——您总是为此付费)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.