Zeiger als Vorlagenparameter?

8

Ich habe eine Containerklasse, wir nennen sie

%Vor%

Ich möchte mit dieser Klasse etwas anderes machen, wenn T ein Zeigertyp ist, z. etwas in der Art von:

%Vor%

Dabei erwartet SomeWrapperClass den Typ der angegebenen Sache als Parameter. Leider funktioniert diese Syntax nicht ganz und mit etwas Graben habe ich keinen guten Weg gefunden, etwas wie das zu funktionieren.

Warum geht das so? Ich möchte in einer sehr großen App ändern, wie einige unserer Container funktionieren, wenn der Typ, auf den sie spezialisiert sind, ein Zeiger und kein Zeiger ist - und idealerweise würde ich es gerne tun, ohne die ~ 1000 Orte zu ändern in dem Code, wo es Dinge gibt wie CVector<Object*> vs CVector<int> oder so etwas - und das Spielen mit partiellen Spezialisierungen schien der richtige Weg zu sein.

Bin ich hier Crack?

    
D Garcia 15.07.2009, 21:46
quelle

6 Antworten

7

Wenn ich Sie richtig verstehe, könnte dies tun, was Sie wollen:

%Vor%

Er fügt eine zusätzliche Vererbungsebene hinzu, um CVector<T*> zu einem CVector< SomeWrapperClass<T> > zu machen. Dies kann auch nützlich sein, falls Sie zusätzliche Methoden hinzufügen müssen, um vollständige Kompatibilität zwischen der erwarteten Schnittstelle für T* und der bereitgestellten Schnittstelle für SomeWrapperClass<T> zu gewährleisten.

    
sth 15.07.2009 22:17
quelle
4

Ich glaube nicht, dass Sie eine Klasse mit der von Ihnen beschriebenen Syntax spezialisieren können ... Ich weiß nicht, wie das funktionieren könnte. Was Sie tun können, ist die Klasse für Zeiger zu spezialisieren und ihre Eingeweide mit der Wrapper-Klasse um die rohen Zeiger neu zu implementieren. Ich bin nicht sicher, ob es helfen wird, aber dieser Artikel beschreibt spezielle Vorlagen für Zeiger.

    
rmeador 15.07.2009 21:54
quelle
4

Das funktioniert in C ++ gut ...

%Vor%     
rlbond 15.07.2009 22:32
quelle
1

Die Boost-Typ-Merkmalsbibliothek kann helfen Du erreichst das. Sehen Sie sich das is_pointer -Typ an.

%Vor%     
Kristian 15.07.2009 22:34
quelle
0

Ich denke nicht, dass Vorlagen so flexibel sind.

Ein Ansatz mit sehr roher Gewalt wäre es, sich auf all Ihre Zeigertypen zu spezialisieren ... was das Problem der Verwendung von Vorlagen verhindert.

Könnten Sie eine andere CVector-Klasse haben, die nur für Vektoren von Zeigern verwendet wird?

    
Jesse Vogt 15.07.2009 21:55
quelle
0

Ich stimme rlbonds Antwort zu. Ich habe es ein bisschen geändert, um Ihrem Bedarf zu entsprechen. CVector kann eine abgeleitete Klasse des CVectors selbst sein. Sie können dann verschiedene Mitglieder und Funktionen dafür verwenden.

%Vor%     
Glenn Yu 22.01.2013 14:13
quelle