【发布时间】:2010-11-20 08:12:18
【问题描述】:
有些人 here 告诉这是不可能的,有些人 here 告诉它可能有一个版本的机器代码用于模板化函数的所有不同模板参数,所以我认为打开一个关于这个具体问题的线程,如果没有这种可能性就是这样,如果有,在什么情况下我们可以指望这个? 下面是两个提到的线程中特别考虑的示例:
template<size_t num>
struct Elements{
public:
SomeType elements[num];
};
template<size_t num>
void print(const Elements<num> & elements,size_t size){
//all instances do exactly same thing and with regard to Size that determines the size of object
}
当然还有传值版本:
template<size_t num>
void print(const Elements<num> elements,size_t size){
//all instances do exactly same thing and with regard to Size that determines the size of object
}
【问题讨论】:
-
在您的按值示例中,可能不可能将不同的实例折叠在一起,因为 elements 参数的大小会不同。这反过来会影响函数 prolog/epilog(堆栈被分配然后清理的地方)。
-
@Crashworks_所以堆栈分配不能完成为每个函数调用保留不同大小的堆栈帧的工作?
-
您应该尝试在调试器的反汇编窗口中查看几个函数调用,看看堆栈是如何实际分配的。这可能比我能装进这个小盒子的任何东西都更有启发性。 =)
标签: c++ templates function instantiation