C ++ Template-Einschränkungen

9

Ich frage mich, gibt es eine Möglichkeit, Einschränkungen für Vorlagenklasse festlegen? Geben Sie an, dass jeder in der Vorlage ersetzte Typ einen bestimmten Vorgänger haben muss (eine Schnittstelle realisieren).

%Vor%

Wie = & gt; in Haskell

%Vor%     
Andrew 17.06.2010, 14:06
quelle

5 Antworten

2

Sie können BOOST_STATIC_ASSERT oder eine ähnliche Bibliothek verwenden, um Ihre Rechte zu bestätigen Einschränkungen für den Vorlagenparameter.

Zum Beispiel:

%Vor%

BEARBEITEN : Für Ihr Beispiel können Sie

schreiben %Vor%     
SLaks 17.06.2010, 14:10
quelle
6

Eine zukünftige Version von C ++ unterstützt dies nativ mit Konzepten (die es nicht in C ++ 11 geschafft haben).

Eine Möglichkeit, das Problem anzugehen, besteht darin, die Spezialisierung auf einen Dummy-Vorlagenparameter anzuwenden:

%Vor%

Ich habe die Standalone-Definitionen von enable_if und is_base_and_derived hier festgelegt.

    
James Hopkin 17.06.2010 14:29
quelle
3

Folgendes funktioniert in VC10 mit static_assert. Ich habe gerade gesehen, dass das verwendet wird und habe nicht wirklich viel darüber nachgedacht, was static_assert tatsächlich tut - vielleicht kann jemand anderes das beantworten.

%Vor%

Die Compilerausgabe ist:

%Vor%     
obelix 17.06.2010 18:50
quelle
2

Sie könnten einen Trick wie diesen verwenden (wenn Sie Boost nicht verwenden möchten):

%Vor%

Die erste Zeile wird kompiliert. Die zweite wird nicht kompiliert und wird den folgenden Fehler geben:

%Vor%     
Patrick 17.06.2010 14:19
quelle
1

Vorlagen sind eine Art Ente in C ++ eingeben.

Wenn Ihre Klasse alles unterstützt, was die Vorlage verwendet, kann sie als Vorlageargument verwendet werden, andernfalls nicht.

Wenn Sie in Ihrer Vorlage etwas wie

haben %Vor%

Dann erzwingen Sie, dass T von C abgeleitet ist (oder zumindest für Zeigern kompatibel ist)

    
Arkadiy 17.06.2010 14:34
quelle

Tags und Links