我知道从stl类继承是一个糟糕的想法。但还有其他方法可以扩展它们吗?
让我们说为了提高可读性,我希望能够在我的向量上调用“add”方法而不是可读性较低的“push_back”。
或许我想在我的std :: map中添加一个简单的hasKey方法。
除了创建一个以std :: vector作为成员的整个包装类,将每个函数调用从包装器传递给向量之外,有什么方法可以做到这一点吗?
答案 0 :(得分:11)
您应该使用免费功能:
template<typename... Args>
bool has_key(std::map<Args...> const& map, typename std::map<Args...>::key_type key) {
return map.find(key) != map.end();
}
如果不是必要的话,请不要使用继承。那太傻了。
答案 1 :(得分:3)
一旦开发人员习惯了STL的名称,改变它们将使代码的可维护性降低。这通常是个坏主意。实际上,由于STL类不提供虚拟析构函数,因此无法从它们继承并具有良好的破坏行为。