Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 16:03

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Feb 02, 2011 19:27 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Gibt es einen C++ Ersatz für den static_assert von C++0x? Ich will ungerne einen C++0x-Compiler voraussetzen nur weil ich aus Performance-Gründen den static_assert benutze um meine Template-Argumente vom Compiler statt zur Laufzeit zu checken.


Edit: Ohne Boost und kompliziertes Gefummel versteht sich ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Feb 03, 2011 08:06 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich nutze Loki static_check(include/loki/static_check.h) http://loki-lib.sourceforge.net/index.p ... n.Download .
Klein, fein und kein Boost.
Code:
    template <typename T,int SIZE>
    class Vector
    {
      public:
        Vector(T a){
            LOKI_STATIC_CHECK(SIZE>=1,NotBigEnough);//why you use a Vector of size zero ?
            Value[0]=a;
            for (int i=1;i<SIZE;++i)
                Value[i]=0;
        }

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Feb 03, 2011 11:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Danke :)

So sieht es jetzt aus:
Code:
namespace CML {
/** A workaround to use static assertions without C++. Use with the STATIC_ASSERT macro. */
template<int> struct StaticAssertion;
template<> struct StaticAssertion<true> { };

#define STATIC_ASSERT(expression, message) \
    { CML::StaticAssertion<((expression) != 0)> ASSERTION_##message; }
}


Nutzung:
Code:
int main(int argc, char **argv) {
   STATIC_ASSERT(5 == 6, Hier_ist_etwas_faul);     // obiges Makro
   static_assert(5 == 6, "Hier ist etwas faul.");  // C++0x Assertion
   return 0;
}


Compiler-Meldung:
Code:
[coolcat@q9300 cml]$ g++ -std=c++0x -o test main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:26:1: error: aggregate ‘CML::StaticAssertion<0> ASSERTION_Hier_ist_etwas_faul’ has incomplete type and cannot be defined
main.cpp:27:2: error: static assertion failed: "Hier ist etwas faul."
[coolcat@q9300 cml]$

Die Meldung von C++0x ist natürlich viel schöner, aber ich fürchte dagegen kann man nichts machen. ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Feb 03, 2011 11:16 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Leider nein, ich hatte das problem vor knapp 3 Monaten und mich dann für Loki entschieden.
Ich werde wohl noch einige andere dinge aus der Bibliothek nutzen, diese ist gut.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]