我有一個模板類,我需要爲特定模板類型實現不同的實現。我如何完成它?對於特定類模板類型的模板類方法的不同實現
4
A
回答
3
您可以專門針對該類型的方法。例如。
template<typename T>
struct TemplatedClass
{
std::string methodA() {return "T methodA";}
std::string methodB() {return "T methodB";}
std::string methodC() {return "T methodC";}
};
// Specialise methodA for int.
template<>
std::string TemplatedClass<int>::methodA()
{
return "int methodA";
}
4
您必須爲此特定類型創建partial (or full) specialization。
2
蒂莫的答案只允許專門類作爲一個整體,這意味着編譯器不會自動成員函數從基類型複製到特殊類型。
如果您想在課堂中專門化一個特定的方法而不重新創建其他任何方法,則會稍微複雜一些。你可以通過傳遞一個大小爲零的模板結構作爲參數,這樣做:
template<typename T> struct TypeHolder { };
template<typename T> class TemplateBase {
public:
void methodInterface() {
methodImplementation(TypeHolder<T>);
}
void anotherMethod() {
// implementation for a function that does not
// need to be specialized
}
private:
void methodImplementation(TypeHolder<int>) {
// implementation for int type
}
void methodImplementation(TypeHolder<float>) {
// implementation for float type
}
};
編譯器將內聯相應methodImplementation
爲methodInterface
,還有的Elid大小爲零結構,所以這將是就好像您只對成員函數進行了專門化一樣。
相關問題
- 1. 在模板類啓用方法基於模板類型
- 2. 迫使特定類型的模板類
- 3. 模板類型推演:不同的模板類型
- 4. 模板類類型特定功能
- 5. 模板方法具有相同的模板類型
- 6. 模板類方法的特化。 「功能模板已經定義」
- 7. 模板類定義類型
- 8. C++不同類型的模板類的顯式模板化函數實例化
- 9. 非模板類的模板方法
- 10. 模板類方法
- 11. 用於實現與模板接口的類的模板
- 12. 返回特定類型的模板
- 13. 是派生對象的模板基類型模板的子類
- 14. 以類型的模板類
- 15. 同類型模板類的內部函數模板
- 16. 鏈表上實現的類型是不同的模板
- 17. C++模板 - 具有模板類型的泛型方法
- 18. 使用模板將類方法綁定到特定的原型
- 19. 從不同的變量模板類型構建變量的模板類型
- 20. 特定模板類型的功能模板專業化
- 21. 模板類型定型
- 22. 模板雙模板類方法
- 23. 「類模板」 與 「模板類」
- 24. 定義模板類本身的類型
- 25. 帶特徵模板的類模板
- 26. 模板不同的返回類型
- 27. 將模板類作爲參數傳遞給類方法並使用模板類作爲矢量模板類型
- 28. C++從類本身的非模板類調用模板方法
- 29. 從不同類型的模板類創建對象
- 30. 無模板變量的模板類型和使用此類模板的其他模板類型
儘管你必須專門研究整個類型,但是你不能只是部分地專注於成員函數。這在答案中是隱含的,但可能會被誤解。 – 2009-11-15 10:43:23
您可以通過使用基類來提供默認實現(並使該基類的構造函數/析構函數受保護以避免使用它)來解決此限制。 – 2009-11-15 14:40:33