繁体   English   中英

C ++中的struct模板

[英]struct templates in c++

我已经学习了函数模板,类模板,模板专业化知识,但是现在我遇到了这个示例,它使其他所有内容无所适从,因为它与其他用法有很大不同,我只是不明白如何在此中使用它例如:

template <int n> struct Fibo
{
    static int val; 
};

template <> int Fibo<0>::val = 1;

template <> int Fibo<1>::val = 1;

template <int n> int Fibo<n>::val = Fibo<n-1>::val + Fibo<n-2>::val;

int CalcFibo(int n)
{ 
    return Fibo<n>::val;
}

不确定我是否了解这里所做的事情(当然,我可以看到它与斐波那契有关,但是与类模板或函数模板相比,它的使用方式也是如此。我只是不明白这里发生了什么,我会很感激如果有人可以帮助我理解)

struct模板和class模板之间没有区别,除了structclass es本身之间的区别(即,结构中的所有成员默认情况下都是公共的,而类中的所有成员默认情况下是私有的。)

模板元编程的这个经典示例并不特定于struct 使用类也可以轻松完成。 您只需要多键入一些即可指定val成员是public

如您对问题的评论中所述,您的代码将无法编译。 问题出在CalcFibo函数中,您在其中使用运行时值(参数n )来实例化模板,该模板始终需要在编译时已知的值。 您可以将“功能”更改为以下形式:

template <int N> int CalcFibo () {return Fibo<N>::val;}

但我怀疑这就是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM