2

我有一堂课:

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>专业化从该基类派生?

4

1 回答 1

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*) { ... }
    }
};
于 2012-09-07T01:37:58.600 回答