Как смоделировать частичную специализацию выбранных функций-членов на основе параметра шаблона, который является контейнером STL?
Я работаю с классом, который использует контейнеры STL в качестве параметра шаблона. Однако не все контейнеры предоставляют одинаковые методы, поэтому я пытаюсь выяснить, как я могу специализировать конкретные методы на основе используемого контейнера.
Пример:
template<typename container>
class A
{
private:
container m_container;
public:
void foo(); // does something container specific
// more generic methods that work with any container
};
Следующий код doexs не компилируется, говоря: «Не удается сопоставить специализацию метода», но это примерно то, чего я хочу достичь:
template<typename T>
template<>
void A<std::vector<T> >::foo()
{
// vector specific implementation
}
template<typename T>
template<>
void A<std::map<T> >::foo()
{
// map specific implementation
}
Я должен поддерживать несколько компиляторов, включая MSVC2010, gcc C ++ 99, старый компилятор Solaris ...
Единственный выход из этого фиаско, который я обнаружил, заключался в реализации внешних методов, которые делают всеfoo
должен делать и перегружать их для разных типов контейнеров. Но я не хочу раскрывать эти функции глобально, есть ли способ сделать это через специализации?
Особый случай, когда их невозможно передать на аутсорсинг, это специализация конструктора ...