gpt4 book ai didi

c++ - 模板元编程 - 我还是不明白 :(

转载 作者:IT老高 更新时间:2023-10-28 12:42:13 25 4
gpt4 key购买 nike

我有一个问题...我不懂模板元编程。

问题是,我已经阅读了很多关于它的内容,但对我来说仍然没有多大意义。

事实 nr.1:模板元编程更快

template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0>
{
enum { value = 1 };
};

// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
int x = Factorial<4>::value; // == 24
int y = Factorial<0>::value; // == 1
}

所以这个元程序更快......因为常量字面量。

但是:现实世界中哪里有常量字面量?我使用的大多数程序都会对用户输入使用react。

事实编号。 2:模板元编程可以实现更好的可维护性。

是的,阶乘示例可能是可维护的,但是当涉及到复杂的函数时,我和大多数其他 C++ 程序员都无法阅读它们。

另外,调试选项很差(或者至少我不知道如何调试)。

模板元编程什么时候有意义?

最佳答案

正如阶乘不是非函数式语言中递归的现实示例,它也不是模板元编程的现实示例。这只是人们想要向您展示递归的标准示例。

在为现实目的编写模板时,例如在日常库中,模板通常必须根据实例化的类型参数来调整它的功能。这可能会变得相当复杂,因为模板有效地有条件地选择要生成的代码。这就是模板元编程。如果模板必须循环(通过递归)并在备选方案之间进行选择,它实际上就像一个在编译期间执行以生成正确代码的小程序。

这是来自 boost 文档页面的非常好的教程(实际上是从 brilliant book 中摘录的,非常值得一读)。

http://www.boost.org/doc/libs/1_39_0/libs/mpl/doc/tutorial/representing-dimensions.html

关于c++ - 模板元编程 - 我还是不明白 :(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com