C++是一种多范式语言,STL和Boost是针对语言的功能范例而构建的.STL由容器(用于保存数据),迭代器(用于访问数据)和算法(用于操作数据的函数)组成.通过使用迭代器将算法函数应用于容器.作为副作用,这些方法不是容器类的一部分,而是完全独立的.(这避免了库编写者的冗余,但对于库用户来说却很痛苦.)
是否有STL/Boost的C++替代品,以更传统的面向对象的方式提供这样的容器?我正在寻找字符串,向量,链表,地图,树,哈希表等.容器应该易于继承和扩展.相比之下,从STL/Boost扩展类是一个非常糟糕的想法,这是他们的设计师的设计.
PS:请不要使用下面的回复空间来证明STL/Boost的优势.我很清楚他们!:-)
Jer*_*fin 31
许多(大多数!)旧的C++库使用的容器与Java和C#中使用的容器更为相似.
这些库的一些例子包括COOL,ET ++,NIH类库和Rogue Wave Tools.h ++.
两点:
为了确保我在这里清楚,至少IMO:
你是独自一人.你被警告了!
对于幽默受损的隐藏式字幕:当然其中一些是幽默的 - 虽然这是一个非常非常糟糕的想法
In *_*ico 25
这避免了库编写者的冗余,但对于库用户来说却很痛苦.
我根本不同意这个前提.即使我这样做,也是一个巨大的过度概括,并不适用于每个图书馆用户.但无论如何这是一个主观陈述,所以我会忽略它.
是否有STL/Boost的C++替代品,以更传统的面向对象的方式提供这样的容器?
...
容器应该有允许人们直接操作它们的方法.(例如,调用vector.sort()而不是sort(vector.begin(),vector.end()).
当然.只需创建自己的容器,将标准容器作为数据成员,并根据需要通过成员函数委托对它们和算法的调用.实施起来相当简单:
template<typename T>
class MyVector
{
public:
void sort()
{
std::sort(vec.begin(), vec.end());
}
// ...
private:
std::vector<T> vec;
};
Run Code Online (Sandbox Code Playgroud)
C++中没有任何东西可以阻止你做这样的事情,具有讽刺意味的是,由于你似乎不同意C++的多范式特性.
如果您不想写出包装函数,则可以使用private继承和using声明.
STL/Boost使得从容器中获取并扩展它们变得很痛苦.
那是因为你不应该从他们那里得到.正确的方法是使用组合,就像我上面提到的代码片段.
STL和Boost是面向对象的,你可以得到它.
出于所有理论目的,成员函数和第一个参数上重载的自由函数是相同的.它们在实践中表现非常相似,包括继承,所以在C++中你应该考虑将(可能是const)引用作为第一个参数的自由函数作为它们的第一个参数的方法.
自由函数的优点是可以为现有类定义它们,允许您向现有类添加接口.这就是为什么STL,特别是强化使用它们的原因.成员函数的主要优点是它们可以是虚拟的(但虚拟方法应该是私有的!)
您不希望通过派生来扩展集合.通常,您不希望通过派生来扩展任何内容,除非它是专门为其设计的抽象基类.关于组合优于继承的优点,请参阅此问题.
你走错了路.如果你想用Java编程,那么用Java编程.如果你用C++编程,那么就像C++程序员那样编程.永远与当前游泳,永远不要反对它.
| 归档时间: |
|
| 查看次数: |
15933 次 |
| 最近记录: |