Ich habe eine Trait-Klasse, die ich oft spezialisieren (und teilweise spezialisieren) muss.Mehrdeutige partielle Template-Spezialisierung
Einige Teil Spezialisierungen überlappen:
template< typename T > struct C { };
template< typename T1, typename T2 > struct TRAIT { };
template< typename T > struct TRAIT< T, T > { };
template< typename T1, typename T2 > struct TRAIT< C<T1>, C<T2> > { };
int main() {
// ERROR! could be both TRAIT<T,T> [with T = C<int>]
// and TRAIT<T1,T2> [with T1 = T2 = int]
TRAIT< C<int>, C<int> > foo;
return 0;
};
Wie soll ich das gleiche Ergebnis mit einem funktionierenden Code bekommen?
Ich ging verrückt mit enable_if
und is_same
, ich bin nicht einmal mehr sicher, es ist der richtige Weg ...
Was versuchst du wirklich? –
Sie sollten Überschneidungen vermeiden. Das ist die Antwort. Die Frage ist die von Karl gestellte Frage: Was versuchst du wirklich? –
Es tut mir leid, Kumpel, aber Sie verwenden C++ falsch. Überdenken Sie Ihre Lösung und/oder schreiben Sie das eigentliche Problem auf, um eine tatsächliche Antwort zu erhalten. – Squirrelsama