[英]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
模板之間沒有區別,除了struct
和class
es本身之間的區別(即,結構中的所有成員默認情況下都是公共的,而類中的所有成員默認情況下是私有的。)
模板元編程的這個經典示例並不特定於struct
; 使用類也可以輕松完成。 您只需要多鍵入一些即可指定val
成員是public
。
如您對問題的評論中所述,您的代碼將無法編譯。 問題出在CalcFibo
函數中,您在其中使用運行時值(參數n
)來實例化模板,該模板始終需要在編譯時已知的值。 您可以將“功能”更改為以下形式:
template <int N> int CalcFibo () {return Fibo<N>::val;}
但我懷疑這就是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.