在C 語言中,如何將模板函數用作模板參數以實現代碼重用維護通用功能,特別是當涉及的函數本身也是模板時?
要解決此問題,請使用範本範本參數。主要概念是模板參數不能直接包含模板模板函數,因為需要事先實例化。解決方法包括使用虛擬結構來封裝模板函數:
template
struct a {
static void foo(T = T()) {}
};
template
struct b {
static void foo(T = T()) {}
};
struct SomeObj {};
struct SomeOtherObj {};
template class T>
void function() {
T::foo();
T::foo();
}
int main() {
function();
function();
}
在此範例中,結構體 a 和 b 實作 foo 方法的範本函數。函數模板採用模板模板參數,讓我們可以將 a 和 b 模板作為參數傳遞。在函數內,建立虛擬結構的特定實例,從而能夠使用不同的參數類型呼叫 foo。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3