【发布时间】:2012-01-07 07:14:08
【问题描述】:
可能重复:
Why is the C++ STL is so heavily based on templates? (and not on interfaces)
为什么stl和Qt容器都不实现接口。例如,Enumerable 对应于 vectors 和 lists。
像这样:
template <typename T>
class Enumerable
{
public:
virtual const T at(int k) = 0;
//....
virtual ~Enumerable() {}
};
template <typename T>
class Vector: public Enumerable<T>
{
public:
virtual const T at(int k);
//....
};
因此,我使用的代码迫使我使用其中使用的具体类型的容器。
【问题讨论】:
-
因为你想错了。使用模板编写通用代码;无需添加昂贵的虚拟层次结构来强加强制且不必要的“一切都必须是对象”的伪哲学。
-
首先,不是 Enumerable 而是 RandomAccessContainer。其次,如果你只想使用抽象基,那么模板适配器就足够了吗?
-
是的,你是对的。它有一些限制,模板不能编译到库中,这就是为什么我认为在特定代码中没有这样做,但这种情况并不常见,我认为不关心它
-
@Kerrek SB:我认为这应该是一个答案而不是评论。
标签: c++