Может ли специализация шаблонов классов использовать неспециализированную реализацию?

У меня есть класс:

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> специализация проистекает из?

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*) { ... }
}
};
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]