是否可以從模板函數參數中推導出非類型模板參數?推導非類型模板參數
考慮這個簡單的模板:
template <int N> constexpr int factorial()
{
return N * factorial<N - 1>();
}
template <> constexpr int factorial<0>()
{
return 1;
}
template <> constexpr int factorial<1>()
{
return 1;
}
我希望能夠改變factorial
,這樣我可以或者調用它是這樣的:
factorial(5);
,讓編譯器弄不清值的N在編譯時。 這可能嗎?也許有一些奇怪的C++ 11添加?
你爲什麼要這麼做? 'factorial'函數不接受任何參數。'factorial(5)'比正確的'factorial <5>()'有什麼好處? – 2012-01-12 15:01:14
@CodyGray:我認爲這個想法是創建一個通用的'factorial'函數,如果它有一個編譯時間已知的表達式,就可以在編譯時計算結果,但如果輸入是運行時,也可以在運行時計算它一個正常的變量。 – 2012-01-12 15:02:51
@Matteo:據我瞭解,由於表達式聲明爲「constexpr」,因此在運行時不會計算任何東西。無論如何,我不明白爲什麼會有任何問題通過「普通變量」而不是使用標準語法的問題。這裏的問題是「我怎樣才能避免輸入尖括號」,我不明白其動機。 – 2012-01-12 15:05:03