簡體   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