templates mit mehreren Rückgabe Typen
-
XSpille schrieb:
Ich bin eigentlich fest davon überzeugt, dass die type_info zur Kompilierzeit ausgewertet wird, lasse mich aber gerne eines Besseren belehren.
Der
typeid-Operator ist Bestandteil von RTTI = Runtime Type Identification. Er wird schliesslich primär eingesetzt, um an den dynamischen Typen hinter Basisklassenverweisen zu kommen, welche per Definition erst zur Laufzeit feststehen.
-
Ach, ich sehe schon das Problem. Du hast deine Klasse dummerweise type_info genannt, worauf ich mir den Code nicht mehr genauer angesehen habe. Wer gibt seiner Klasse auch so einen Namen, wobei sie damit nicht mal ansatzweise was zu tun hat. Was du da verwendest, ist ein Type2Type von Alexandrescu, das passt schon so.
-
Nexus schrieb:
XSpille schrieb:
Ich bin eigentlich fest davon überzeugt, dass die type_info zur Kompilierzeit ausgewertet wird, lasse mich aber gerne eines Besseren belehren.
Der
typeid-Operator ist Bestandteil von RTTI = Runtime Type Identification. Er wird schliesslich primär eingesetzt, um an den dynamischen Typen hinter Basisklassenverweisen zu kommen, welche per Definition erst zur Laufzeit feststehen.type_info != std::type_info
Der Name mag etwas ungünstig gewählt sein für ein tag, mit RTTI hat es jedenfalls nichts zu tun.
-
Nexus schrieb:
XSpille schrieb:
Ich bin eigentlich fest davon überzeugt, dass die type_info zur Kompilierzeit ausgewertet wird, lasse mich aber gerne eines Besseren belehren.
Der
typeid-Operator ist Bestandteil von RTTI = Runtime Type Identification. Er wird schliesslich primär eingesetzt, um an den dynamischen Typen hinter Basisklassenverweisen zu kommen, welche per Definition erst zur Laufzeit feststehen.Hi Nexus,
das weiß ich.@PI: Geht deine Kritik an die typeid oder an das typeinfo-Template, das ich gepostet habe?
Ich dachte der Kommentar hatte sich auf das Template bezogen.
EDIT: OK, alle Unklarheiten beseitigt. Dann gebe ich dir absolut recht.
-
2
-
314159265358979 schrieb:
2

Also doch an das Template?

-
Ich hab die Exception nur aus seinem Code übernommen ohne mir darüber Gedanken zu machen.
nu ja möglicherweise ist die exception da nicht geeignet. Grundsätzlich soll diese mich schnell über einen Programmierfehler informieren. ich habe die komplette app in ein try gelegt.
also so:
#include "main.h" #include <QString> #include <QApplication> #include "app.h" #include "exception.h" int main(int argc, char** argv) { QApplication app(argc, argv); app.setWindowIcon(QIcon(":/tmb.ico")); QString app_style = "QMenuBar::item {background-color: rgb(255,255,255);}" "QMenuBar::item:selected {border: 1px solid rgb(121,152,241);}" "QMenu::item {padding: 2px 25px 2px 20px;background: #FFFFFF;border: 1px solid transparent;}" "QMenu::item:selected {border: 1px solid rgb(121,152,241);background-color: rgb(226,233,254);color: #000000;}" "QMenu::separator { width: 1px; height: 1px;}"; app.setStyleSheet(app_style); QString app_dir = QApplication::applicationFilePath(); app_dir = app_dir.left(app_dir.lastIndexOf( '/' ) + 1); try { return App(app, app_dir).Run(); } catch (const Exception& exception) { return exception.handle(); } }
-
Ein static_assert, fliegt aber schon beim Kompilieren auf die Nase

Sie informiert dich also schneller als eine Exception
-
ja stimmt, das ist ja schon zur compile Zeit bekannt. habe c++0x hinzugefügt
template <typename T> struct IsInteger { static bool const value = false; }; template <> struct IsInteger<int> { static bool const value = true; }; template <typename T> struct IsBool { static bool const value = false; }; template <> struct IsBool<bool> { static bool const value = true; }; template <typename T> struct IsQString { static bool const value = false; }; template <> struct IsQString<QString> { static bool const value = true; }; static_assert(IsInteger<T>::value | IsBool<T>::value | IsQString<T>::value , "unsupported type of setting");
-
Wie wäre es mit:
static_assert(std::is_same<T, int>::value || std::is_same<T, bool>::value || std::is_same<T, QString>::value, "unsupported type of setting");