passender Kopierkonstruktor gesucht
-
nico_schumann schrieb:
Danke, wieder was gelernt. Dass auch innerhalb von Klassen eigene Templates definiert werden koennen war mir neu.
Das nennt sich Membertemplates.
Und übrigens:
Schreibst du nur:template <typename U> Number( const Number<U>& x )gibt es keinen Kopierkonstruktor, da der aus einem Template nie generiert wird.
Der Compiler generiert also einen für dich.
Das nur als Hinweis, falls der Kopierkonstruktor einen speziellen Job hat.
-
camper schrieb:
direkter Zugriff auf t erfordert eine zusätzliche friend-Deklaration, sonst kann dieser Konstruktor nur für U=T verwendet werden
FTFY
-
Arcoth schrieb:
camper schrieb:
direkter Zugriff auf t erfordert eine zusätzliche friend-Deklaration, sonst kann dieser Konstruktor nur für U=T verwendet werden
FTFY
Den Konstruktor als friend deklarieren?
Wie wuerde denn die friend-Deklaration des Konstruktors in diesem Fall aussehen?
-
nico_schumann schrieb:
Arcoth schrieb:
camper schrieb:
direkter Zugriff auf t erfordert eine zusätzliche friend-Deklaration, sonst kann dieser Konstruktor nur für U=T verwendet werden
FTFY
Den Konstruktor als friend deklarieren?
Wie wuerde denn die friend-Deklaration des Konstruktors in diesem Fall aussehen?Nicht Konstruktor, die Klasse für alle Instanziierungen.
-
Nathan schrieb:
nico_schumann schrieb:
Arcoth schrieb:
camper schrieb:
direkter Zugriff auf t erfordert eine zusätzliche friend-Deklaration, sonst kann dieser Konstruktor nur für U=T verwendet werden
FTFY
Den Konstruktor als friend deklarieren?
Wie wuerde denn die friend-Deklaration des Konstruktors in diesem Fall aussehen?Nicht Konstruktor, die Klasse für alle Instanziierungen.
??? Stehe grad auf dem Schlauch. Was meinst du damit?
-
nico_schumann schrieb:
??? Stehe grad auf dem Schlauch. Was meinst du damit?
Edit: Huch, da hatte ich wohl einen Blackout. In die Definition sollte
template<typename> friend class Number;0
damit du direkt auf dastjeder Spezialisierung zugreifen kannst.
-
Arcoth schrieb:
In die Definition
template<typename> friend class Number;schreiben.
Also wie hier:
template <typename T> class Number { T t; public: Number( const T& te = T() ) : t(te) {} template <typename U> Number( const Number<U>& x ) : t(x.t) {} template<typename> friend class Number; };Jetzt funktionierts

-
Arcoth schrieb:
camper schrieb:
direkter Zugriff auf t erfordert eine zusätzliche friend-Deklaration, sonst kann dieser Konstruktor nur für U=T verwendet werden
FTFY
nochmal drüber nachdenken...

-
camper schrieb:
Arcoth schrieb:
camper schrieb:
direkter Zugriff auf t erfordert eine zusätzliche friend-Deklaration, sonst kann dieser Konstruktor nur für U=T verwendet werden
FTFY
nochmal drüber nachdenken...

Dass das Template bei direktem Zugriff auf
x.tohnefriend-Deklaration nie funktionieren kann ist mir klar. Das liegt aber nur daran dass das Template nicht für U=T instantiiert wird.
-
Du hast das Kommentar nicht verstanden.
Er greift über den Getter zu, und im Kommentar steht dass "friend gebraucht wird SONST". Also wenn man direkt zugreifen würde. Was er aber nicht macht. Weswegen er auch kein friend braucht.
-

Ich dachte, der Satz war irgendwie abgeschnitten, entschuldigt.
-
Hihi, kann ja mal passieren. Die Wortstellung ist auch etwas ... unüblich.