template<typename T1, typename T2>
class Bimap {
public:
class Data {
private:
template<typename T> Data& set(T);
template<> Data& set<T1>(typename T1 v) { /*...*/ }
};
};
Das hat mir den Fehler gibt:C++: Fehler "explizite Spezialisierung in nicht-Namespace scope"
error: explicit specialization in non-namespace scope 'class Bimap<T1, T2>::Data'
Ich verstehe, was der Fehler sagt. Aber warum kann ich das nicht tun? Und wie kann ich es reparieren?
Beachten Sie, dass einige Compiler dies unterstützen werden. – Puppy
In C++ können Sie eine Membervorlage nicht explizit spezialisieren, ohne die umschließende Klassenvorlage explizit zu spezialisieren. Was du versuchst (Spezialisierung), ist * nicht möglich *. Sie müssen Überladung verwenden. Oder das Ganze komplett neu gestalten. MSVC++ ist ein Compiler, der dies jedoch als Erweiterung erlaubt. – AnT