【发布时间】:2016-04-14 13:52:32
【问题描述】:
我想像这样实现两个简单的抽象类:
class Hashable {
public:
virtual Int hashValue() = 0;
};
template <typename T>
class Equatable {
virtual Bool operator == (const T& other) = 0;
}
这些类将使我有机会在我的新字典类中进行部分模板专业化。
但是,我无法让它们工作。这是我的字典类的声明:
template <Hashable Key, typename Value>
class Dictionary {
.
.
.
};
问题是,key 也应该是Equatable,因为哈希性应该需要它。
所以,我有两个问题:
我们可以重写
Equatable<T>类以使其没有模板参数吗? C++ 是否有任何关键字引用当前类的类型?在我看来,
Hashable最好继承自Equatable类。如何在没有Hashable上的新模板定义的情况下实现这一点(如果我的第一个问题的答案是肯定的,那么这已经解决了)?这里最好的面向对象方法是什么?拥有一个带有模板参数的接口类似乎很俗气。
谢谢。
【问题讨论】:
-
我认为您实际上是在寻找类型类机制,这在 C++ 中并不是很好。从 C++11 开始就计划了一种概念机制,但它甚至没有实现到 C++17 (honermann.net/blog/?p=3)
标签: c++ inheritance abstract-class