2010-10-23 283 views
3

您好!有人知道一種方法來實現或模仿以下行爲嗎? (此代碼導致編譯時錯誤)。C++模板專業化

例如,我想僅在派生類中添加特定的模板特化。

struct Base { 
    template <typename T> void Method(T a) { 
     T b; 
    } 

    template <> void Method<int>(int a) { 
     float c; 
    } 
}; 

struct Derived : public Base { 
    template <> void Method<float>(float a) { 
     float x; 
    } 
}; 

回答

7

如何超載

struct Base { 
    template <typename T> void Method(T a) { 
     T b; 
    } 

    void Method(int a) { 
     float c; 
    } 
}; 

struct Derived : public Base { 
    using Base::Method; 
    void Method(float a) { 
     float x; 
    } 
}; 

明確的專業化不能像在您的示例中添加。此外,形成不良的基類,你必須定義類的範圍之外的任何明確的專業化

struct Base { 
    template <typename T> void Method(T a) { 
     T b; 
    } 
}; 

template <> void Base::Method<int>(int a) { 
    float c; 
} 

所有明確的專業化需要給模板的名稱雖然要專業,或者是在與模板的範圍相同。你不能只在這樣的Derived類中寫明確的專業化。