我对类型模板参数的编译方式有一定的了解。但是非类型模板也会以同样的方式进行编译吗?
例如,对于以下类型模板:
template<typename T>
class TemplatedClass {
..do something with T..
};
TemplatedClass<int> IntClass;
TemplatedClass<char> CharClass;
以上内容将被编译为int和char的分别类定义:
class TemplatedClass<int> {
..do something with int..
};
class TemplatedClass<char> {
..do something with char..
};
当模板化非类型参数时,编译器是否以相同的方式进行处理?例如:
template<int N>
class NumericClass {
int array[N];
..do something else with N..
};
NumericClass<3> Class3;
NumericClass<5> Class5;
这会为数值中的每个类型生成单独的类定义,就像下面这样吗?
class NumericClass3 {
int array[3];
..do something else with 3..
};
class NumericClass5 {
int array[5];
..do something else with 5..
};
如果是这样,如果模板参数存在大量数字可能性,那么是否会导致大量膨胀的编译代码?我可以在我的核心API中定义一个带有数字模板的静态数组类。然后,每次我使用唯一长度值声明实例时,都必须为其编译一个新的类定义。假设我的代码是开放式的,这可能会导致大量编译定义。 据我所知,这仍然是鼓励的做法。编译器是否有其他处理非类型模板的方法?或者说,以这种方式进行编译的开销并不是很大吗?