小编OB *_* OB的帖子

为什么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万
查看次数

为什么Switch/Case而不是If/Else If?

这个问题主要针对C/C++,但我猜其他语言也是相关的.

我无法理解为什么仍然使用switch/case而不是if/else if.在我看来,很像使用goto,并导致相同类型的混乱代码,而相同的结果可以使用if/else,如果是更有条理的方式.

不过,我经常看到这些块.找到它们的一个常见位置是在消息循环(WndProc ...)附近,而这些是它们引发最严重破坏的地方之一:变量在整个块中共享,即使不是主要的(也不是在里面初始化).必须特别注意不要放弃休息,等等......

就个人而言,我避免使用它们,我想知道我错过了什么?

它们比if/else更有效吗?它们是否继承传统?

c c++ switch-statement conditional-statements

60
推荐指数
6
解决办法
4万
查看次数

IE中的Javascript getters/setters?

无论出于何种原因,自定义对象的Javascript getters/setter似乎适用于任何浏览器,但IE.

IE是否有任何其他非标准机制?(与许多其他功能一样)

如果没有,是否有任何变通方法可以实现相同的功能?

javascript getter setter internet-explorer incompatibility

20
推荐指数
2
解决办法
1万
查看次数

循环引用有哪些解决方案?

使用引用计数时,有哪些可能的解决方案/技术来处理循环引用?

最着名的解决方案是使用弱引用,但是关于该主题的许多文章暗示也存在其他方法,但是不断重复弱引用示例.这让我想知道,这些其他方法是什么?

  • 我不是问什么是引用计数的替代方法,而是使用引用计数时循环引用的解决方案是什么.

  • 这个问题不是关于任何具体问题/实施/语言而是一般性问题.

reference-counting circular-reference

15
推荐指数
2
解决办法
8705
查看次数