我对如何编译类型模板参数有一个公平的理解.但是非类型模板是否以相同的方式编译?
例如,使用类似这样的类型模板:
template<typename T>
class TemplatedClass {
..do something with T..
};
TemplatedClass<int> IntClass;
TemplatedClass<char> CharClass;
Run Code Online (Sandbox Code Playgroud)
以上内容将被编译为单独的int和char类定义:
class TemplatedClass<int> {
..do something with int..
};
class TemplatedClass<char> {
..do something with char..
};
Run Code Online (Sandbox Code Playgroud)
模板化非类型参数时,编译器是否以相同的方式执行此操作?例如:
template<int N>
class NumericClass {
int array[N];
..do something else with N..
};
NumericClass<3> Class3;
NumericClass<5> Class5;
Run Code Online (Sandbox Code Playgroud)
这会为每个数值生成单独的类定义,如下所示?
class NumericClass3 {
int array[3];
..do something else with 3..
};
class NumericClass5 {
int array[5];
..do something else with 5..
};
Run Code Online (Sandbox Code Playgroud)
如果是这样的话,如果模板参数存在大量的数字可能性,那么是否会导致大量繁琐的编译代码?我可以在我的核心API中使用数字模板定义静态数组类.然后每次我声明一个具有唯一长度值的实例时,它必须为它编译一个新的类定义.假设我的代码是开放式的,这可能导致大量编译定义.
据我所知,这仍然是鼓励练习.那么编译器是否还有其他一些处理非类型模板的方法?或者以这种方式编译它的开销并不是那么重要?