【发布时间】:2015-06-17 08:24:52
【问题描述】:
我有一个包含以下虚方法的类:
struct point {
template<typename T>
virtual typename std::enable_if<std::is_base_of<point, T>::value, double>::type distTo(T &other) const = 0;
};
上述方法不起作用,因为:
error: templates may not be ‘virtual’
计划是通过制作更具体的类实例来专门化该类,例如point2D、point3D。但是,我只希望该函数与同一类的类型一起使用。所以如果point2D从哪里继承这个类,方法distTo应该只接受point2D类型的参数。我怎样才能做到这一点?
这是我在执行上述操作之前尝试过的:
virtual double distTo(point& other) = 0;
但是当我在 point2D 类中重写此方法并尝试将参数替换为 point2D 类型之一时,我遇到了编译器错误。
感谢您的宝贵时间
【问题讨论】:
-
一个虚函数不能比它的包含类更多的模板。但是如果包含类是模板,那么它的虚函数也可以是模板。另一方面,派生类可以比其基类更多模板,并提供其虚函数的模板实现......
标签: c++ inheritance polymorphism abstract-class