在 C 中,範本參數必須是常數表達式。這意味著它們的值必須在編譯時已知。編譯器無法在此上下文中計算非常量變數。
考慮代碼:
template
void modify(){}
要傳遞一個非常量變數作為範本參數,我們可以這樣寫:
for(int i = 0; i ();
}
但是,這會觸發錯誤,因為編譯器無法在編譯時決定 i 的值。循環體可能會執行多次,改變i的值。
我們可以使用模板特化來實現,而不是直接傳遞非常量變量迭代調用:
#include
template
void modify() { std::cout "
void modify() { std::cout "
void modify() {
std::cout " ();
}
int main() {
modify();
}
要使用編譯時未知的值來呼叫Modify,我們可以使用稱為模板元程式設計的技術。這是一個簡化的範例:
#include
template <:tuple>>
struct TupleSize;
template
struct TupleSize<:tuple>> {
static const int value = sizeof...(Args);
};
template
void callModify(int i) {
if constexpr (i ();
callModify(i 1);
}
}
int main() {
int n = 10;
callModify::value>(0);
}
在此範例中,callModify 採用參數 N,該參數是包含 i 所需值範圍的元組的大小。此函數使用遞歸元程序產生呼叫以修改至指定大小 N。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3