Como simular uma especialização parcial de funções-membro selecionadas com base em um parâmetro de modelo que é um contêiner STL?

Estou trabalhando com uma classe que usa contêineres STL como um parâmetro de modelo. Porém, nem todos os contêineres fornecem os mesmos métodos, então estou tentando descobrir como posso especializar métodos específicos com base no contêiner usado.

Exemplo:

template<typename container>
class A
{
private:
    container m_container;
public:
    void foo(); // does something container specific

    // more generic methods that work with any container
};

O código a seguir não compila dizendo "Não pode corresponder à especialização do método", mas é aproximadamente isso que eu quero alcançar:

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
}

Eu tenho que dar suporte a vários compiladores, incluindo MSVC2010, gcc C ++ 99, um antigo compilador Solaris ...

A única maneira de contornar esse fiasco que encontrei foi implementar métodos externos que fazem qualquer coisafoo deve fazer e sobrecarregá-los para os diferentes tipos de contêineres. Mas não quero expor essas funções globalmente, existe uma maneira de fazê-lo através de especializações?

Caso especial em que não é possível terceirizá-las são as especializações de construtor ...

questionAnswers(2)

yourAnswerToTheQuestion