2012-09-07 159 views
2

我有一個類:類模板專業化可以利用非專業實現嗎?

template<typename T> 
class Foo 
{ 
public: 
    ... 
    Foo& operator=(const Foo&) { ... } 
}; 

而且我想專門Foo<std::string>添加Foo<std::string>::operator=(const char*)過載和重用Foo<T>實施的其餘部分。是否有可能利用專門化實現非專業化實施,還是必須將Foo<T>實施移到單獨的基類中:Foo<T>Foo<std::string>專門化是從哪個基類中派生出來的?

回答

2

模板的多個特化是不相關的類型。正如你在問題中提到的,一種常見的方法是將大部分功能移到基類中以重用它。

對於C++ 1x,有兩種方案可以通過一個新的構造static if來表達意圖,儘管這兩個方案在被接受之前都有一些問題需要解決,然後你會有等待標準被批准,然後編譯器趕上...仍然只是爲了心靈的鍛鍊,所提出的語法不會使用明確的專業化,而是定製通用模板:

template<typename T> 
class Foo 
{ 
public: 
    ... 
    Foo& operator=(const Foo&) { ... } 
    static if (std::is_same<T,std::string>::value) { 
     Foo& operator=(const char*) { ... } 
    } 
};