gpt4 book ai didi

c++ - 使用模板元编程计算阶乘

转载 作者:IT老高 更新时间:2023-10-28 21:45:50 25 4
gpt4 key购买 nike

我不明白这段代码(from Wikipedia)作品:

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
}
  • 这个奇怪的模板是什么?需要<int N> ?
  • 这是几秒奇怪的模板 <> ?
  • 什么是 enum为?
  • 有什么优势使用这个而不是正常的运行时阶乘计算?
  • 你们多久使用一次?我已经使用 C++ 一段时间了,但以前从未使用过。我错过了多少 C++?

谢谢!

最佳答案

  • What is this weird template that takes <int N>?

在 C++ 中,模板参数可以是类型(以 classtypename 为前缀)或整数(以 intunsigned int 为前缀)。这是第二种情况。

  • What is this second weird template <>?

template<> struct Factorial<0>是 Factorial 类模板的完整特化,这意味着 0被认为是一个特殊值,对应于它自己的 Factorial 版本。

  • What are the enums for?

枚举是 C++ 元编程中计算值的方法

  • What is the advantage of using this rather than normal runtime factorial calculation?

首先创建此代码的原因是为了创建一个概念证明,即可以使用元编程来完成微积分。优点是生成的代码非常高效(调用 Factorial<4>::value 相当于在代码中简单地写“24”。

  • How often do you people use this? I have been using C++ for a while now, but never used this before. How big a part of C++ was I missing out on?

使用这种方法很少能实现这样的功能,但现在越来越多地使用元编程。见 Boost meta-programming library以了解可以做什么。

关于c++ - 使用模板元编程计算阶乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3082113/

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