Templates 如何在C++;?

Templates 如何在C++;?,templates,visual-c++,Templates,Visual C++,我的代码中有很多模板 如何找出哪些模板导致代码膨胀(即通过多次实例化)?对问题及其注释的简要说明:模板实例化的数量并不重要,只有使用不同类型组合的实例化的数量是重要的。这与模板专门化非常不同 有一种简单而肮脏的方法可以手动跟踪实例化。对于要检查的模板,只需添加一行即可生成警告。这里很难给出这样的语句,因为它完全取决于项目中的编译器类型和编译器选项。一个好的猜测是添加一个具有唯一名称和可疑值的静态变量。现在,您所要做的就是过滤编译器日志中的这些自定义警告。因为所有不同的类型组合只编译一次,所以每个

我的代码中有很多模板


如何找出哪些模板导致代码膨胀(即通过多次实例化)?

对问题及其注释的简要说明:模板实例化的数量并不重要,只有使用不同类型组合的实例化的数量是重要的。这与模板专门化非常不同

有一种简单而肮脏的方法可以手动跟踪实例化。对于要检查的模板,只需添加一行即可生成警告。这里很难给出这样的语句,因为它完全取决于项目中的编译器类型和编译器选项。一个好的猜测是添加一个具有唯一名称和可疑值的静态变量。现在,您所要做的就是过滤编译器日志中的这些自定义警告。因为所有不同的类型组合只编译一次,所以每个组合应该只有一个警告。如果不是这样,从日志中筛选重复项仍然很容易

不幸的是,用这样的自定义语句标记所有模板是一种干扰,而且可能非常耗时。如果需要更复杂的东西,可以尝试使用模板元程序调试器。在这里(Boost邮件列表),您可以找到一个简短的摘要和一个指向免费提供的调试器下载页面的链接


如果您对它的工作原理感到好奇,您可以在中阅读更多有关它的信息。

问题及其注释的简要说明:模板实例化的数量并不重要,只有具有不同类型组合的实例化的数量是重要的。这与模板专门化非常不同

有一种简单而肮脏的方法可以手动跟踪实例化。对于要检查的模板,只需添加一行即可生成警告。这里很难给出这样的语句,因为它完全取决于项目中的编译器类型和编译器选项。一个好的猜测是添加一个具有唯一名称和可疑值的静态变量。现在,您所要做的就是过滤编译器日志中的这些自定义警告。因为所有不同的类型组合只编译一次,所以每个组合应该只有一个警告。如果不是这样,从日志中筛选重复项仍然很容易

不幸的是,用这样的自定义语句标记所有模板是一种干扰,而且可能非常耗时。如果需要更复杂的东西,可以尝试使用模板元程序调试器。在这里(Boost邮件列表),您可以找到一个简短的摘要和一个指向免费提供的调试器下载页面的链接


如果您对它的工作原理感到好奇,可以在中阅读更多有关它的信息。

@LuchianGrigore:Specialized?我的意思是实例化的……嗯,在第一次专门化之后,没有后续的代码膨胀。@LuchianGrigore:Wha。。。?我的意思是,
std::max
vs.
std::max
生成同一模板的不同实例化。。。或者这叫做“专门化”?这叫做专门化;)@卢钦格里戈:你确定吗?这不是我所理解的。。。我想是在为更具体的类型重新定义(即“专门化”)模板的时候?(我不是在制作新模板,我只是用不同的参数来使用它…@LuchianGrigore:Specialized?我的意思是实例化的……嗯,在第一次专门化之后,没有后续的代码膨胀。@LuchianGrigore:Wha。。。?我的意思是,
std::max
vs.
std::max
生成同一模板的不同实例化。。。或者这叫做“专门化”?这叫做专门化;)@卢钦格里戈:你确定吗?这不是我所理解的。。。我想是在为更具体的类型重新定义(即“专门化”)模板的时候?(我不是在制作新模板,我只是在使用不同的参数…)