PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ Template und Pointer by-Reference


Gast
2008-03-12, 10:32:45
Hi,

klar bringt es keinen Vorteil, wenn man einen Pointer nicht kopiert sondern per Referenz übergibt, allerdings scheint dies auch nicht zu gehen bzw. wieso nicht?
Wenn ich ein Template habe
template<class TYPE>
class Foo
{
void wurz( TYPE& obj) {};

TYPE x;
}dann funktioniert dies gut
Foo<Bar> b;
Bar s
b.wurz( s );
Allerdings...
Foo<Bar*> bp;
bp.wurz( &s );
...also einen Pointer zu übergeben, funktioniert nicht gcc stört sich an Bar*&. Man müßte also stets zwei Funktionen bauen, kann man das vermeiden und einen Pointer an eine Funktion übergeben, ohne deswegen Objekte kopieren zu müssen (oder alles per Pointer zu machen).

Blöder ist das noch bei der Funktion, die Rückgabe als Referenz funktioniert bei mir auch nicht, wenn Pointer im Template sind:
TYPE& get();
TYPE get();
Diese Funktionen haben dann aber die gleiche Signatur und lassen sich nicht mehr überladen implementieren.

Ich möchte hinein oder aus meinem Template möglichst nicht by-Value kopieren müssen, möchte aber gleichzeitig Pointer und Objekte verwenden und es einheitlich von außen bedienen können. Wo ist da mein Fehler bzw. wie macht man das?

Gast
2008-03-12, 11:56:12
*s

Gast
2008-03-12, 12:25:12
Wenn das Template sich zu einem Typ mit einem Pointer implementiert, soll man eben auch Pointer verwenden können.

Neomi
2008-03-12, 13:29:38
Das liegt nicht daran, daß es ein Pointer ist, sondern daß du einen R-Value übergibst, obwohl ein L-Value erwartet wird. Du hast zwei Möglichkeiten:

1. einen L-Value übergeben

Foo<Bar*> bp;
Bar *sp = &s;
bp.wurz(sp);

2. einen R-Value entgegennehmen

void wurz(const TYPE& obj) {};