10 Stimmen

eine Mitgliedsvorlage spezialisieren, ohne ihre übergeordnete Vorlage zu spezialisieren

Ich habe eine Klassenvorlage innerhalb einer anderen Vorlage verschachtelt. Teilweise ist es einfach zu spezialisieren: Ich deklariere einfach eine weitere template< … > Blocks innerhalb seines Elternteils.

Ich benötige jedoch eine weitere partielle Spezialisierung, die zufällig alle ihre lokalen Vorlagenargumente angibt. Das macht sie zu einer expliziten Spezialisierung. Explizite Spezialisierungen, aus welchem Grund auch immer, müssen im Namespace-Bereich liegen. Um sie außerhalb der übergeordneten Klasse zu deklarieren, muss die übergeordnete Klasse benannt werden, was eine nicht leere Liste von Template-Argumenten erfordert. Dies impliziert eine partielle Spezialisierung. Partielle Spezialisierung ist was ich tue, und es soll in einem beliebigen äußeren Rahmen funktionieren. Aber sowohl GCC als auch Comeau scheitern, die Vorlage Parameter in der übergeordneten Nominierung mit der partiellen Spezialisierung formale Argumente zu identifizieren.

template< class X > struct A {
    template< class Y > struct B; // initial declaration OK

    template< class Z >
    struct B< A< Z > > {}; // partial OK as long as there's a local arg

    template<> // ERROR: this syntax triggers explicit specialization
    struct B< int > {};
};

template<> // ERROR: can't nest template<>s here (why?)
template< class X > // ERROR: can't deduce X from type of A<X>::B<int> (why?)
struct A< X >::B< int > {};

(Ich habe den ganzen nicht funktionierenden Code drin gelassen; kommentieren Sie ihn entsprechend, damit er Sinn ergibt).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X