相关疑难解决方法(0)

为什么C++ STL基于模板如此重要?(而不是*接口*)

我的意思是,除了它的义务名称(标准模板库)......

C++最初的目的是将OOP概念呈现给C.即:您可以基于其类和类层次结构来判断特定实体可以做什么和不可行(不管它是如何做的).由于多重继承的问题,以及C++以某种笨拙的方式支持接口的概念(与java等相比),某些能力组合更难以这种方式描述,但它存在(并且可能是改善).

然后模板与STL一起发挥作用.STL似乎采用了经典的OOP概念,并使用模板代替了它们.

在使用模板来概括类型的情况之间应该有区别,其中类型自身与模板的操作无关(例如,容器).有一个vector<int>完美的感觉.

但是,在许多其他情况下(迭代器和算法),模板化类型应该遵循"概念"(输入迭代器,前向迭代器等等),其中概念的实际细节完全由模板的实现定义函数/类,而不是与模板一起使用的类的类,这是对OOP的一种反对使用.

例如,您可以告诉函数:

void MyFunc(ForwardIterator<...> *I);
Run Code Online (Sandbox Code Playgroud)

更新:由于在原始问题中不清楚,因此ForwardIterator可以自行模板化以允许任何ForwardIterator类型.相反,将ForwardIterator作为一个概念.

只需通过查看其定义来预期转发迭代器,您需要查看实现或文档:

template <typename Type> void MyFunc(Type *I);
Run Code Online (Sandbox Code Playgroud)

我可以支持使用模板的两个声明:通过为每个使用的类型定制编译模板,而不是使用vtable,可以提高编译代码的效率.并且模板可以与本机类型一起使用.

但是,我正在寻找一个更为深刻的理由,为什么放弃传统的OOP而不是模仿STL呢?(假设你读到那么远:P)

c++ oop templates stl

210
推荐指数
9
解决办法
3万
查看次数

标签 统计

c++ ×1

oop ×1

stl ×1

templates ×1