模板參數常數求值
1.為什麼編譯器在編譯時不能計算'i'?
編譯時計算要求在程式執行前就知道'i'的值。但是,在提供的程式碼中,「i」是一個循環變量,在程式執行期間會發生變化。編譯器無法在編譯時確定“i”的值,因為它是動態分配的值。
2。我可以在不修改 API 介面的情況下實現目標嗎?
是的,您可以使用範本特化來建立遞歸函數,迭代範本參數的範圍。例如,您可以建立一個函數:
template
void modify_recursive() {
// Call modify with template argument 'i'
modify();
// Recursively call modify_recursive with the next template argument
if (i ();
}
}
使用非常量參數呼叫“modify”
要使用非編譯時常量的值呼叫“modify”,您可以使用稱為模板元程式設計的技術。一種方法是建立一個模板類,該類將函數物件作為參數並使用所需的值來呼叫它:
template
struct InvokeWithParam {
InvokeWithParam(F f, int param) : f(f), param(param) {}
void operator()() { f(param); }
F f;
int param;
};
int var = 5; };int var = 5;
modify();
這將使用 var 的值來呼叫修改函數。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3