我想捕獲編譯時間傳遞給模板類型的函數的常量整數。未來的目標是推出我自己的(非常有限的)表達式模板,該模板從非常簡單的表達式(編譯時間常量int和變量之和)創建表達式,例如:-2 * i + 3 * k。integral_constant和模板參數扣除
我開始很慢,我有以下代碼:2
struct Foo {
Foo (int i) : i_(i) {}
int i_;
};
template <int N> int operator*(std::integral_constant<int, N> i, Foo j) {
return N * j.i_;
}
int main(void) {
std::integral_constant<int, 2> k;
int i = k * Foo(3);
cout << i << endl;
int j = 2 * Foo(3);
cout << j << endl;
}
模板參數推導失敗*美孚(3)。 我已經讀過,沒有這樣的東西作爲一個函數的constexpr參數。
有沒有辦法實現我想要的?
使operaator,構造,並導致「constexpr」。 –
感謝您的回覆,我不能使它工作不幸:我修飾了j,運算符和Foo構造函數的定義,我仍然使用gcc-4.6和clang ++獲得相同的模板演繹錯誤。你介意發佈一個編譯的修改版本嗎?另外,一般來說,Foo可能不是一個constexpr,而是我的表達中更通用的術語。 – NickV
我懷疑你可以把2變成一個integral_constant。你必須至少寫我(2)或類似的東西,我是一個宏。表達式模板中有什麼用int_cst類型的成員int來存儲數字2.不完全一樣... –