所有与模板类交互的代码都必须使用模板吗?所有与模板类型交互的代码都必须使用模板吗?
想象
template<T>
class Data {
public:
Data(T value) {
this->value = value;
};
T getValue() {
return value;
};
virtual size_t size() = 0;
private:
T value;
};
会有的size()
特定实现几种可能T
(字符串,整数,等等)。
注意:我可以有一个抽象类,但我不能既没有构造函数/ getValue,也没有虚拟方法,因为我将不得不指定它们的参数/返回值类型。
进一步假设自己需要的功能,如
template<T>
size_t getSize(Data<T> value) {
return value.size();
}
size()
虽然将是每种不同类型的不同,发件人(getSize()
方法)不应该关心T
。
所以问题是为什么有必要模板函数,我可以避免它?
如果您只想与单个Data的专业化进行交互,但通常不需要任何Data,则可以避免这种情况。与“Data”互动不需要模板,但通常会与“Data ”进行交互,因为Data的每个专门化实际上都是不同的类型。尝试添加'static_assert(std :: is_same ,数据> :: value,“类型不同。”);'代码,你会看到它。 –
也许你正在寻找[类型擦除技术](http://stackoverflow.com/documentation/c%2b%2b/2872/type-erasure) –