类模板专业化可以利用非专业化实现吗?

时间:2012-09-07 01:17:09

标签: c++ template-specialization

我有一个班级:

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

我想专门Foo<std::string>添加Foo<std::string>::operator=(const char*)重载并重用Foo<T>实现的其余部分。 Foo<std::string>专业化是否有可能利用非专业化实现,或者我必须将Foo<T>实现移动到Foo<T>Foo<std::string>专业化派生的单独基类中从?

1 个答案:

答案 0 :(得分: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*) { ... }
    }
};