[gelöst] Typüberprüfung Compilezeit
-
Ja, die Überschrift ist nicht das Gelbe vom Ei, denn das macht ja der Compiler

Folgendes: Im Code habe ich verschiedene typedefs vorliegen.
z.B.
typedef int MyType1 typedef int MyType2nun möchte ich bspw. mittels boost_static_assert überprüfen, ob MyType1 und MyType2 DENSELBEN Typen verwenden. Diesbezüglich gab es ein glaub ein boost-Template-Schnippsel, der mir grad nicht einfallen möchte
-
template<typename T> bool same_type(T const&, T const&) { return true; } template<typename T, typename U> bool same_type(T const&, U const&) { return false; }hab ich.. aber ich wollte eben gerne die boost-templates verwenden...
-
#include <boost/mpl/assert.hpp> #include <boost/type_traits/is_same.hpp> BOOST_MPL_ASSERT(( boost::is_same< wchar_t, wchar_t > ));und wech
-
Hier hilft dir keine Bibliothek. MyType1 und MyType2 sind absolut identisch. Ein typedef erzeugt keinen neuen Typ, sondern nur einen Aliasnamen, den du in deinem Programm verwenden kannst.
Wenn du einen neuen Typ willst, musst du eine Struktur oder Klasse mit entsprechenden Namen erzeugen.
-
nein, ich möchte nur sicherstellen, dass Typ1 == Typ2. Schon klar was ein Alias ist
Nur möchte ich auf diesem Wege verifizieren, dass meine Annahme durch achtlose Änderung eines Dritten (der z.B. das typedef ändert, da sich diese nat nicht in der selben Datei befinden) nicht mehr stimmt 
Aber wie gesagt mein letzter Post war die Lsg dafür (hatte es zuvor nur nicht auf Anhieb gefunden)
-
template<typename T, typename U> struct is_same { static const bool value = false; }; template<typename T> struct is_same<T, T> { static const bool value = true; }; #include <cassert> int main() { assert(! (is_same<int, float>::value)); assert( (is_same<int, int >::value)); // assert( (is_same<float, int>::value)); }die zusätzlichen klammern sind bissl blöd - aber da gibts sicherlich nen trick, die auch wegzubekommen

musst du mal warten, bis jmd kompetenteres über den thread stolpert
bb
edit:
ich seh gerad - ich hätt auch mal aktualisieren können, bevor ich poste^^
wenn du boost eh schon drin hast, würd ich es auch so lassen - ansonsten würd ich vrmtl boost rauslassen und das assert einfach nur durch nen staticassert ersetzen...
-
ja, boost wird so und so verwendet. Anosnten haette ich auch die Lösung präfieriert. Allerdings smit nem static assert
