2012-03-13 30 views
3

我可以重寫和使用模板類型的子類作爲超類嗎?我可以重寫和使用超類中的模板類型的子類

我是一個Java程序員,這與仿製藥效果很好,但是我很熟悉如何做太多的C++

我可以使用類

template <typename T> 
class A{ 
public: 
    T get(){ 
     return t; 
    } 
    A(){ 
    } 
    void set(T tt){ 
     t=tt; 
    } 
private: 
    T t; 
}; 

而且具有類似的東西它擴大

class B:A<B> 

凡亞類B作爲一般類型爲A類和B類不需要泛型

+3

您正在製作'class Box {Box b; };'。只有法恩斯沃思教授才能這樣做。 – 2012-03-13 22:44:12

回答

1

原則上,您對模板的使用稱爲「好奇復發模板模式」(CRTP)並且完全有效。

但是請注意,Java泛型和C++模板在許多方面都有很大的不同,包括在A中使用B的限制。導出的CRTP類在模板實例化中不完整,因此您無法分配任何對象他們在你的基礎班上就像你做的那樣。這就是您的代碼無法編譯的原因。通常的方法是使用訪問器方法,例如:

void set(T tt){ 
    static_cast<T&>(*this)=tt; 
} 
相關問題