C++ 在C+中使用模板元编程+;,求两个整数的GCD

C++ 在C+中使用模板元编程+;,求两个整数的GCD,c++,template-meta-programming,greatest-common-divisor,C++,Template Meta Programming,Greatest Common Divisor,我想知道使用递归欧几里德算法求解两个数的GCD问题的模板元编程解决方案,如下所示供参考 function gcd(a, b) if b = 0 return a; else return gcd(b, a mod b); 任何帮助都将不胜感激 像这样的 #include <utility> #include <iostream> template<int a, int b> struct gcd { s

我想知道使用递归欧几里德算法求解两个数的GCD问题的模板元编程解决方案,如下所示供参考

function gcd(a, b)
    if b = 0
       return a; 
    else
       return gcd(b, a mod b);
任何帮助都将不胜感激

像这样的

#include <utility>
#include <iostream>

template<int a, int b> struct gcd
{
    static constexpr auto value = gcd<b, a % b>::value;
};

template<int a>
struct gcd<a, 0>
{
    static constexpr auto value = a;
};

int main()
{
    auto x = gcd<10,5>::value;

    std::cout << x << std::endl;
}
#包括
#包括
模板结构gcd
{
静态constexpr auto value=gcd::value;
};
样板
结构gcd
{
静态constexpr自动值=a;
};
int main()
{
自动x=gcd::值;

std::我可以投票结束这个问题吗?因为这是一个对代码的请求,没有显示出提供解决问题的代码的努力。OP通过制定解决方案会学到比填鸭式解决方案更多的东西。@Peter我觉得这种结束方式真的令人沮丧。我在这里寻找这个问题的答案为了避免重蹈覆辙,似乎问题的结束阻止了好答案的出现。幸运的是,在这种情况下,好答案似乎是在结束之前发布的。@DonHatch-我不在这里制定指导原则-如果你想争论结束问题的标准应该改变,那么总是有Meta。另外,在问题结束之前,我只是五位投票赞成结束的人中的一位——这不是我单方面做的事情。在专业版中,为什么不说struct gcd?@VarunRao,因为模板参数不是这样使用的。你不需要编写
printf(const char*“我的文本”);
@VarunRao试试看。