我一直在阅读这个词:
- 模板编程
- 泛型编程
- 元编程
- 也许另一个成语/术语..
对于任何使用模板的 c++ 代码,哪一个是正确或更准确的术语?
AFAIK:
模板编程只是指经典的“使用模板编程”,即“我有一个函数/类,我想让它适用于任何类型,我就让它成为模板”。
它也可以被视为“包罗万象”的类别,包括使用模板的任何编程技术。
泛型编程可以综合描述为 STL 使用的编程范式。
维基百科将其定义为
一种计算机编程风格,其中算法是根据待指定的类型编写的,然后在需要时为作为参数提供的特定类型实例化
恕我直言,最好说所有容器都设计用于任何类型(不牺牲类型安全性),并且算法设计为足够通用以适用于任何容器类型(显然,只要使用它们是明智的,即对无序的容器进行排序是没有意义的)。
请注意,泛型编程(具有此定义)并不严格要求使用模板,事实上它可以通过继承和动态多态性来实现(感谢 Ben Voigt)。
一般来说,我会说模板编程和泛型编程部分重叠,许多人可以互换使用泛型编程和模板编程这两个术语。
模板元编程是一种编程风格,其中模板用于执行编译时计算/决策/检查,通常在没有模板的情况下无法实现(静态断言、编译时常量计算……)。
Such code is often quite contrived, since C++ wasn't designed for this style of programming (which was actually "discovered" later), and may look unfamiliar to C++ programmers also because it often gets near to functional programming (without having nice syntax facilities for it) instead of following the imperative paradigm normally used in C++.
它通常被称为泛型编程。
模板元编程不同于正常使用模板,在 TMP 类型中是在编译时操作的(参见boost.Mpl)。