代码是标准C++;有时声明一个默认模板参数很有用。例如,如果您定义一个类Vector3D<T>
(在数学 3D 向量的意义上),默认T
为double
. 至于标准库std::vector
模板,声明如下:
template < class T, class Alloc = allocator<T> > class vector;
请注意类使用的分配器如何默认为特征类提供的特定分配器;我们大多数人通常只指定class T
并让默认分配器处理底层数据结构。C++ 标准库中的大多数其他模板都使用一些默认参数进行了类似的定义。
这让我想到了你所说明的具体案例。除了其他样式问题,其目的似乎适用于类型特征:类型T
可以具有auto_delete_trait
如下声明的关联:
实时代码示例
#include<iostream>
template<typename T>
struct auto_delete_trait {
static const bool value = true;
};
template<typename T>
struct myclass {
void method(T val) {
std::cout<<"value: "<<val<<std::endl;
if(auto_delete_trait<T>::value) {
std::cout<<"auto_delete enabled"<<std::endl;
} else {
std::cout<<"auto_delete disabled"<<std::endl;
}
}
};
// suppose that ints are not supposed to be auto-deleted (obviously
// this is an example; the concept of "auto-delete" does not make
// sense here)
template<>
struct auto_delete_trait<int> {
static const bool value = false;
};
int main() {
myclass<double> c1;
myclass<int> c2;
c1.method(1.234);
c2.method(1);
// expected output:
// value: 1.234
// auto_delete enabled
// value: 1
// auto_delete disabled
return 0;
}