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%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.
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%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)