2012-09-07 237 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*) { ... } 
    } 
};