假設我有一組函數和類,它們的模板使用單精度(float
)或double
精度。當然,我可以只寫兩段引導代碼,或者用宏來搞亂。但是我可以在運行時切換模板參數嗎?在C++運行時選擇模板參數
8
A
回答
19
不,您不能在運行時切換模板參數,因爲模板在編譯時由編譯器實例化。你可以做的是有兩個模板公共基類派生,總是使用基類中的代碼,然後決定哪些派生類在運行時使用:
class Base
{
...
};
template <typename T>
class Foo : public Base
{
...
};
Base *newBase()
{
if(some condition)
return new Foo<float>();
else
return new Foo<double>();
}
宏有同樣的問題模板,因爲它們在編譯時被擴展。
3
模板是一種編譯時機制。順便說一句,宏也是一樣(嚴格來說 - 預處理機制 - 即使在編譯之前也是如此)。
2
模板純粹是一個編譯時構造,編譯器將展開一個模板並用指定的參數創建您的類/函數,並直接將其轉換爲代碼。
如果您試圖在運行時在foo<float>
和foo<double>
之間切換,您需要使用一些元編程技巧或者爲每個元編程路徑分別設置代碼路徑。
相關問題
- 1. 運行時的模板參數C++
- 2. 選擇在運行時模板實例雖然切換在C++
- 3. C++中派生類的模板參數運行時選擇 - 標準名稱?
- 4. 在運行時選擇ctor參數
- 5. T4模板和運行時參數
- 6. C++模板函數選擇
- 7. 通過枚舉模板參數編譯時間模板選擇
- 8. 如何在選擇查詢參數時運行選擇查詢
- 9. C++在運行時從編譯時間已知設置/枚舉中選擇模板非類型參數
- 10. 運行時使用模板參數實例化類(C++)?
- 11. 模板函數如何選擇參數?
- 12. 評估模板(模板模板參數)的C++模板參數
- 13. 在運行時模板實例化和功能選擇
- 14. 使用InstantSearch.js在運行時選擇不同的模板
- 15. 在運行時選擇基類類型,如模板
- 16. 選擇c模板函數參數類型
- 17. 參數在C++模板
- 18. C++ 11可選模板類型參數?
- 19. 在運行時合併數據模板
- 20. 模板類可選擇將初始值作爲模板參數
- 21. C++,通過模板參數選擇功能
- 22. 如何根據運行時數據在Dynamic Data中選擇DynamicField模板?
- 23. C++/Boost模板運行時多態性
- 24. 當給定默認模板參數時,將選擇什麼模板值?
- 25. Django的模板選擇時
- 26. 在運行時選擇string.xml
- 27. 在運行時選擇AspxGridView
- 28. 執行不同的C++模板參數
- 29. 是否可以在運行時選擇C++泛型類型參數?
- 30. C++模板基於模板參數