Auswahl eines geeigneten Kopierkonstruktors basierend auf Vorlagenparametern

8

Ich möchte die Implementierung einer Memberfunktion (Kopierkonstruktor) basierend auf einem Template-Argumentwert auswählen. Ich vermute, es gibt zwei Ansätze: SFINAE und Template-Teilspezialisierung.

Der letzte soll angeblich so aussehen:

%Vor%

Es kompiliert nicht: nested name specifier 'B<A, false>::' for declaration does not refer into a class, class template or class template partial specialization .

Der SFINAE-Ansatz schlägt fehl:

%Vor%

Der Kompilierungsfehler hier ist constructor cannot be redeclared und no type named 'type' in 'std::enable_if<false, B<int, false> >'; 'enable_if' cannot be used to disable this declaration .

Gibt es eine Möglichkeit, die Probleme zu beheben oder einen anderen Kopierkonstruktor auf der Basis von Vorlagenparametern auszuwählen?

    
Alexander Sergeev 27.10.2015, 08:52
quelle

3 Antworten

4
%Vor%

DEMO

    
Piotr Skotnicki 27.10.2015, 09:01
quelle
1

Wie @ Joachim Pileborg im Kommentar sagte, du kannst nicht nur ein Mitglied einer Klasse spezialisieren, du musst die ganze Klasse spezialisieren. Ihre partielle Spezialisierung wird also so aussehen:

%Vor%

Die beste Lösung, die Sie für SFINAE bekommen können, wurde von @Piotr Skotnicki

gegeben     
Pumkko 27.10.2015 09:09
quelle
0

Ich weiß, dass dies ein minimales Beispiel ist, aber was stimmt nicht mit

%Vor%     
David Seiler 27.10.2015 09:03
quelle

Tags und Links