作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何为对象编写显式特化
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 error C3855: 'List': 模板参数 'Car' 与声明 h:...\List.hpp 不兼容 75Error 20 error C2264: 'List::clear' : 函数定义或声明错误;函数未调用 h:...\List.hpp 75
但是这个构造是可以的
template <>
void List < Car <double> >::clear() //Specialization U = Car <T>, compiler error
{
....
}
最佳答案
我认为您可以这样做的唯一方法是:
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>
但是,考虑到模板类型仍然出现,您只是对其进行了部分特化。无论如何,我的推论可能是错误的。
关于c++ - 显式特化,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4759251/
我是一名优秀的程序员,十分优秀!