2010-11-25 3 views
0

Ich mag wäre in der Lage sein, dies zu tun:Gleiche Erklärung zwei verschiedene Arten

X<int> type_0; 
X<int> type_1; 

und ich würde für type_0 und TYPE_1 wie zwei verschiedene Typen. Wie kann ich es tun?

+0

Sie könnten ... verschiedene Typen verwenden? Oder verpasse ich hier etwas? –

+0

Meinst du 'typedef X type_0;'? – kennytm

+0

@Mike und Kenny keine Jungs, ich möchte diese Klasse Vorlage (X) irgendwie erklärt werden, dass jede Instanziierung mit dem gleichen Parameter neuen Typ erstellt. –

Antwort

1

Sie könnten Ordnungs Tags verwenden:

template <typename T, int Tag> class X { ... }; 

typedef X<int, 0> type_0; 
typedef X<int, 1> type_1; 

Alternativ können Sie Vererbung:

class type_0 : X<int> { ... }; 
class type_1 : X<int> { ... }; 

Aber diese leidet unter einigen Schwierigkeiten, wie die Notwendigkeit Konstruktorparameter und Gefahren zu übermitteln mit Misch Zuweisungssemantik und Vererbung.

+0

danke, siehe meine Antwort auf lijie –

+0

@There ...: Dann könnte die Vererbungslösung Ihre einzige Option sein. –

1

Sie müssen für eine andere Sache parametrisieren (z. B. eine ganze Zahl?). Definieren Sie beispielsweise X als template <typename T, int N> struct X {...}; und verwenden Sie X<int,0> type_0; X<int,1> type_1. Wenn Vorlagenparameter übereinstimmen, haben sie den gleichen Typ.

+0

das ist die Art der Sache, ich möchte es mit dem Unterschied nur tun, dass ich möchte, dass dieser zweite Parameter vom Compiler berechnet wird, also muss ich es nicht manuell eingeben –

+0

Sie meinen Sie wollen, dass jede Variable als ein anderer Typ betrachtet wird? und du willst dich nie auf den Typ mit Namen beziehen? – lijie

+0

Ich möchte, wie Sie gesagt haben, jede Variable als einen anderen Typ betrachtet werden. –

1

eine Klasse machen, die von der X-Template-Klasse erbt, wie folgt aus:

template <int I> 
class type_i : public X<int> 
    { 
    }; 

typedef type_i<0> type_0; 
typedef type_i<1> type_1; 
+0

danke für deine antwort +1, ja es klingt machbar. Ich werde es jetzt ausprobieren und später werde ich alle wissen lassen, wie es für mich gelaufen ist und was ich produziert habe. –

7
template < typename T, int I > class X; 

X<int, __LINE__ > x0; 
X<int, __LINE__ > x1; 

x0 und x1 verschiedene Typen sein, wie dies andere Erklärungen wie, wenn sie nicht auf der gleichen Linie sind in der Datei.

+0

ha lol :) +1 von mir –

+0

Das ist ziemlich schlau: D –

+0

@CashCow es ist in gewisser Weise eine Lösung, aber könnten Sie bitte erklären (für ich weiß nicht wie;) Was ist die __LINE__ und was damit zu tun? Vielen Dank. –

Verwandte Themen