我试图了解元编程是通用的,特别是在 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/