Как смоделировать частичную специализацию выбранных функций-членов на основе параметра шаблона, который является контейнером 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 должен делать и перегружать их для разных типов контейнеров. Но я не хочу раскрывать эти функции глобально, есть ли способ сделать это через специализации?

Особый случай, когда их невозможно передать на аутсорсинг, это специализация конструктора ...

Ответы на вопрос(2)

Ваш ответ на вопрос