C++,使用模板编程的术语/习语
Posted
技术标签:
【中文标题】C++,使用模板编程的术语/习语【英文标题】:C++, the term/idiom for programming using template 【发布时间】:2011-05-27 21:16:22 【问题描述】:我一直在读这个词:
-
模板编程
通用编程
元编程
可能是另一个成语/术语..
对于任何使用模板的 c++ 代码,哪一个是正确或更准确的术语?
【问题讨论】:
这是一篇很好的文章,描述了(除其他外)泛型编程:stlport.org/resources/StepanovUSA.html,直接来自发明它的人。 【参考方案1】:阿法伊克:
模板编程只是指经典的“使用模板编程”,即“我有一个函数/类,我想让它适用于任何类型,我'将只是使其成为模板"。
它也可以被视为“包罗万象”的类别,包括任何使用模板的编程技术。
泛型编程可以综合描述为 STL 使用的编程范式。
***将其定义为
一种计算机编程风格,其中算法根据待指定的类型编写,然后在需要时为作为参数提供的特定类型实例化
恕我直言,最好说所有容器都设计为可与任何类型一起使用(不牺牲类型安全性),并且算法设计为足够通用以适用于任何容器类型(只要使用它们是明智的,显然,即对无序的容器进行排序是没有意义的)。
请注意,泛型编程(具有此定义)并不严格要求使用模板,事实上它可以通过继承和动态多态性来实现(感谢 Ben Voigt)。
总的来说,我会说模板编程和泛型编程部分重叠,很多人使用术语泛型编程和模板编程可互换。
模板元编程是一种编程风格,其中模板用于执行编译时计算/决策/检查,通常在没有模板的情况下无法实现(静态断言、编译时常数计算,...)。
这样的代码通常是相当做作的,因为 C++ 不是为这种编程风格而设计的(实际上是后来“发现”的),而且 C++ 程序员可能看起来不熟悉,也因为它经常接近函数式编程(没有很好的语法工具)而不是遵循通常在 C++ 中使用的命令式范式。
【讨论】:
可能值得一提的是,“泛型编程”不需要模板,使用继承和重载虚函数的动态多态性也可以称为“泛型编程”。 @Ben:是的,你是对的,虽然通常在 C++ 中使用模板进行操作效率更高。 @Matteo:这不是一个真正的效率问题——动态多态支持异构对象的集合,而模板不支持。有时甚至必须同时使用这两种方法。 @Ben:虽然使用动态多态性会抛出类型安全问题,这意味着它不再通用。我想说,如果不使用模板,C++ 中的泛型编程是不可能的。我强烈怀疑 Stepanov 会说同样的话,他创造了这个词。 ;) @jalf:子类型演算表明动态多态性不会违反类型安全,至少在理论上是这样。您是否在考虑某些 C++ 没有做理论上正确的事情的特殊情况?我很想听听你的例子。【参考方案2】:通常称为泛型编程。
模板元编程与正常使用模板不同,在 TMP 类型中是在编译时操作的(请参阅boost.Mpl)。
【讨论】:
以上是关于C++,使用模板编程的术语/习语的主要内容,如果未能解决你的问题,请参考以下文章