1

如何为对象编写显式特化

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: 'List': 模板参数 '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
{
    ....
}
4

2 回答 2

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>,而是部分专业化了它,因为模板类型仍然出现。无论如何,我的推论可能是错误的。

于 2011-01-21T13:58:33.563 回答
0

这个常见问题解答项目应该让您继续前进。

因此它是这样的:

struct Car
{
};

template <>
void List < Car >::clear()   //Specialization U = Car <T>, compiler error
{
    ....
}
于 2011-01-21T13:54:36.067 回答