gpt4 book ai didi

c++ - 模板元编程三元值未达到基本情况

转载 作者:行者123 更新时间:2023-11-27 23:44:30 25 4
gpt4 key购买 nike

我正在使用 TMP 编写一个简单的测试程序来计算第 N 个斐波那契数。我已经找到了很多方法来做到这一点,但我只是在尝试多种方法来更好地理解。我遇到问题的方式是:

template<int A>
struct fib
{
static const bool value = (A<2);
static const int num = (value?A:(fib<A-1>::num + fib<A-2>::num));
};

我得到的错误信息是:

error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum) instantiating 'fib<-1796>::value'|

我曾尝试将许多值代入三元的“false”字段,只是为了玩弄它,看看它做了什么。我仍然不明白为什么这不起作用。任何人都可以帮助我并告诉我为什么吗?谢谢。

编辑:我的猜测是编译器可能会在检查值是真还是假之前评估三元的 T/F 字段,但我不确定,因为这不是 if 语句应该做的完全可以工作,这些应该可以粗略地模拟 if 语句

最佳答案

我必须承认,我在模板编程方面经验不足。但就 OP 而言,一个简单的解决方案是模板特化。

示例代码:

#include <iostream>

template<int A>
struct fib
{
static const int num = fib<A-1>::num + fib<A-2>::num;
};

template<>
struct fib<1>
{
static const int num = 1;
};

template<>
struct fib<2>
{
static const int num = 1;
};

int main()
{
fib<10> fib10;
std::cout << "fib<10>: " << fib10.num << '\n';
return 0;
}

输出:

fib<10>: 55

Live Demo on coliru

关于c++ - 模板元编程三元值未达到基本情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51721675/

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