eine KlassendeklarationIst es möglich, std :: enable_if zu verwenden, um eine Mitgliedervorlagenspezialisierung auszuwählen?
class A {
template <typename T> T foo();
};
Gegeben Ich mag würde A::foo
für verschiedene Arten spezialisieren (int
, ...) und Typklassen (POD, nicht-POD) von T
. Leider kann ich std::enable_if
nicht für letzteres verwenden. Die folgende lässt sich nicht kompilieren:
template <> int A::foo<int>(); // OK
template <typename T>
typename std::enable_if<is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
template <typename T>
typename std::enable_if<!is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
Die Frage an die std::enable_if<...>
Sachen als Teil der Funktionssignatur wahrscheinlich ist, und dass ich nicht erklären, eine solche Mitglied innerhalb A
. Wie kann ich ein Template-Mitglied basierend auf Typeigenschaften spezialisieren?
Aber Sie können nicht nur auf Rückgabetyp überladen ... –
@Daniel Gehriger 'enable_if' wurde für bedingte Entfernen von Funktionen aus Überlast-Auflösungen gemacht, so ziemlich genau für diesen Fall. – nijansen
Ja, aber ich habe immer noch die 'A :: foo()' (und viele andere Spezialisierungen für einige spezifische Typen), die mit dem kollidieren, was von 'enable_if' ausgewählt wurde. –