前一個模板參數可以在它後面這種方式的另一個模板參數一起使用:如何在聲明的另一個模板參數使用模板參數
template<typename T, T N>
struct s
{
};
但有可能引用「T」,如果它是在「N」之後聲明?
這不起作用:
template<T N, typename T>
struct s
{
};
我們可以幫助編譯器通過聲明前的「T」或做其他事情?
提前致謝。
編輯:作爲前兩個答覆問「你爲什麼願意這樣做?」我將解釋目標:
我想讓編譯器推斷出類型「T」,以便更容易地使用模板類。
例如:
template<typename T, T A, T B>
struct sum
{
static T const value = A + B;
};
這個模板可以採用這種方式:
sum<int, 1, 2>::value
但它會更好,如果它可以被這樣使用:
sum<1, 2>::value
技術上這應該是可能的,因爲編譯器知道「1」和「2」的類型:「int」,實際上它使用這些inf以找到一個功能的最佳過載。 所以通過聲明模板是這樣的:
template<T A, T B, typename T>
struct sum
{
static T const value = A + B;
};
編譯器可以使用它的能力來推斷從第一和第二個提供的信息的最後一個參數,然後找實例化的最佳模板。
感謝您的回答:如果規範說不,它不是。 現在的問題是:爲什麼這種有限的行爲,而似乎有可能做到這一點扣除? 你有一些例子證明這個決定嗎? 謝謝。 – Pragmateek 2009-09-19 14:54:03
因爲模板元編程從來沒有被表達出來? :)雖然有趣的問題。可能 - 你應該檢查這是否已經提出,或者爲C++ 1x提出這個建議。 – UncleBens 2009-09-19 15:28:09