c++ - 在 C++ 元编程中是否全部使用模板?

标签 c++ templates metaprogramming template-meta-programming

我试图了解元编程是通用的,特别是在 C++ 中是什么。如果我搜索 c++ 元编程,我会得到模板元编程 (TMP) 的教程,但没有解释它是否只对模板的特定用途或模板的所有用途进行分类。

我的问题是 C++ 中模板的所有用法是否都归类为元编程。解释为什么它是或不是也会有帮助。谢谢你。

最佳答案

My question is if all usages of templates in C++ is categorized as metaprogramming.



不。

在 C++ 中,并非所有模板的用法都是元编程。

显然这是一个定义问题,但在 C++ 中,“元编程”是“编译时计算”的同义词。

因此,我们使用模板进行元编程(特别是模板元编程),但并非模板的所有用途都是元编程。

一个简单的反例
template <typename K, typename V>
void printKeyVal (K const & k, V const & v)
 { std::cout << k << ": " << v << std::endl; }

前面的 printKeyVal()是一个模板函数,它打印到标准输出(因此是运行时,而不是编译时),几个通用值。

它不能在编译时运行,所以它是"template"但不是“元编程”。

更一般的:std::vector是一个使用内存分配的模板类。并且内存分配(直到 C++17;也许将来可能会有所不同)不能在编译时代码中使用。

所以std::vector (与 std::array 相反,具有固定大小,不使用内存分配)是一个模板功能,不能用于元编程(当使用涉及 std::vector 对象的实例化时)。

关于c++ - 在 C++ 元编程中是否全部使用模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59598338/

相关文章:

c++ - 使用衰减与完美转发

java - 将一个数组的每个元素乘以另一个数组的每个元素并对新的非常大的数组进行排序

C++11 从频繁变化的范围内生成随机数

iphone - 如何使用 Xcode4 项目模板将文件添加到复制捆绑资源构建阶段

templates - D 中柯里化(Currying)函数的模板?

c++ - 如何将模板类添加为普通类中的成员

c++ - 像没有 java 的 Apache Zookeeper 之类的东西?

c++ - 在 C++ 中查找序列的最小值/最大值/平均值

python 为整个程序修改 __metaclass__

python装饰器和方法