Wie kann eine teilweise Spezialisierung ausgewählter Elementfunktionen basierend auf einem Vorlagenparameter simuliert werden, der ein AWL-Container ist?

Ich arbeite mit einer Klasse, die AWL-Container als Vorlagenparameter verwendet. Da jedoch nicht alle Container die gleichen Methoden bereitstellen, versuche ich herauszufinden, wie ich bestimmte Methoden basierend auf dem verwendeten Container spezialisieren kann.

Beispiel

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

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

Der folgende Code doexs kompiliert nicht "Kann nicht mit Methodenspezialisierung übereinstimmen", aber dies ist ungefähr das, was ich erreichen möchte:

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
}

Ich muss eine Reihe von Compilern unterstützen, darunter MSVC2010, gcc C ++ 99, ein alter Solaris-Compiler ...

Der einzige Weg, um dieses Fiasko zu umgehen, bestand darin, externe Methoden zu implementieren, die alles tun, wasfoo soll sie für die verschiedenen Containertypen tun und überladen. Aber ich möchte diese Funktionen nicht global verfügbar machen. Gibt es eine Möglichkeit, dies durch Spezialisierungen zu erreichen?

Besonderer Fall, in dem es nicht möglich ist, sie auszulagern, sind Konstruktorspezialisierungen ...

Antworten auf die Frage(4)

Ihre Antwort auf die Frage