如何为对象
编写显式特化Car<T>
在虚方法clear()?
template <class U>
class List
{
public:
virtual void clear();
};
template <class T>
template <>
void List < Car <T> >::clear() //Specialization U = Car <T>, compiler error
{
....
}
级车:
template <class T>
class Car
{
T speed;
...
}
编译错误:
错误16错误C3855:'列表':模板参数'Car'与声明h不兼容:... \ List.hpp 75 错误20错误C2264:'List :: clear':函数定义或声明中的错误;函数不叫h:... \ List.hpp 75
但这种结构还可以
template <>
void List < Car <double> >::clear() //Specialization U = Car <T>, compiler error
{
....
}
答案 0 :(得分:2)
我认为你能做到这一点的唯一方法是:
template<class T>
class Car
{
};
template <class U>
class List
{
public:
virtual void clear();
};
template <class T>
class List<Car<T> >
{
public:
virtual void clear() { /* specialization */ }
};
或非内联版本:
template <class T>
class List<Car<T> >
{
public:
virtual void clear();
};
template <class T>
void List<Car<T> >::clear() {
/* specialization */
}
因为你并没有真正专攻List<T>
,而是你部分专门化它,因为模板类型仍然出现。无论如何,我的演绎可能是错误的。
答案 1 :(得分:0)
This faq item应该让你去。
因此它是这样的:
struct Car
{
};
template <>
void List < Car >::clear() //Specialization U = Car <T>, compiler error
{
....
}