【发布时间】:2011-05-27 21:16:22
【问题描述】:
我一直在读这个词:
- 模板编程
- 通用编程
- 元编程
- 可能是另一个成语/术语..
对于任何使用模板的 c++ 代码,哪一个是正确或更准确的术语?
【问题讨论】:
-
这是一篇很好的文章,描述了(除其他外)泛型编程:stlport.org/resources/StepanovUSA.html,直接来自发明它的人。
我一直在读这个词:
对于任何使用模板的 c++ 代码,哪一个是正确或更准确的术语?
【问题讨论】:
阿法伊克:
模板编程只是指经典的“使用模板编程”,即“我有一个函数/类,我想让它适用于任何类型,我'将只是使其成为模板"。
它也可以被视为“包罗万象”的类别,包括任何使用模板的编程技术。
泛型编程可以综合描述为 STL 使用的编程范式。
维基百科将其定义为
一种计算机编程风格,其中算法根据待指定的类型编写,然后在需要时为作为参数提供的特定类型实例化
恕我直言,最好说所有容器都设计为可与任何类型一起使用(不牺牲类型安全性),并且算法设计为足够通用以适用于任何容器类型(只要使用它们是明智的,显然,即对无序的容器进行排序是没有意义的)。
请注意,泛型编程(具有此定义)并不严格要求使用模板,事实上它可以通过继承和动态多态性来实现(感谢 Ben Voigt)。
总的来说,我会说模板编程和泛型编程部分重叠,很多人使用术语泛型编程和模板编程可互换。
模板元编程是一种编程风格,其中模板用于执行编译时计算/决策/检查,通常在没有模板的情况下无法实现(静态断言、编译时常数计算,...)。
这样的代码通常是相当做作的,因为 C++ 不是为这种编程风格而设计的(实际上是后来“发现”的),而且 C++ 程序员可能看起来不熟悉,也因为它经常接近函数式编程(没有很好的语法工具)而不是遵循通常在 C++ 中使用的命令式范式。
【讨论】:
通常称为泛型编程。
模板元编程与正常使用模板不同,在 TMP 类型中是在编译时操作的(请参阅boost.Mpl)。
【讨论】: