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?
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.
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.
Die Boost-Typ-Merkmalsbibliothek kann helfen Du erreichst das. Sehen Sie sich das is_pointer -Typ an.
%Vor%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?
Tags und Links c++ templates partial-specialization