In einer Klasse, B
die von einer Klasse erbt A
, ist es möglich, eine using
Deklaration zu verwenden, um Mitglieder A
in B
sogar Vorlagen wie diese zu bringen:
struct A {
template <typename T>
void foo();
};
struct B : private A {
using A::foo;
};
Aber kann es für Konvertierungsvorlagen gemacht werden?
struct A {
template <typename T>
operator T();
};
struct B : private A {
using A::operator /* ??? */;
};
Es scheint keine Möglichkeit zu geben, namentlich auf die Vorlage zu verweisen, aber ich würde mich gerne als falsch erweisen oder eine Klarstellung erhalten.
private
Vererbung schlecht durchdacht, IMO.C
von ihnen erbtB
,C
sollte aber keinen Zugriff aufA
die geschützten Methoden haben. Ich möchte jedoch, dassA
die öffentlichen Methoden öffentlich bleiben, einschließlich dieses Konvertierungsoperators. Ich weiß, dass ich dies auf einige Arten umgehen könnte, aber ich würde es lieber vermeiden, zusätzlichen Code zu schreiben, um so wenig Nutzen zu erzielen.A
, können Sie sichA
in zwei Klassen aufteilen - eine,B
die erben kann,public
und die andereprivate
.Antworten:
Um dieses Problem zu umgehen, können Sie es in die Basisklasse umwandeln und explizit konvertieren:
quelle