2012-04-11 17 views
0
#include "boost/date_time/gregorian/gregorian.hpp" 

int main() 
{ 
    boost::gregorian::greg_weekday dWeek(boost::date_time::Wednesday); 

    //Code One 
    // warning C4482: nonstandard extension used: enum 'boost::date_time::weekdays' used in qualified name 
    if (dWeek.as_enum()==boost::gregorian::greg_weekday::weekday_enum::Wednesday) 
    { 
     std::cout << "Today is Wednesday" << std::endl; 
    } 

    //class BOOST_DATE_TIME_DECL greg_weekday : public greg_weekday_rep { 
    //public: 
    // typedef boost::date_time::weekdays weekday_enum; 

    //Code Two 
    if (dWeek.as_enum()==boost::date_time::Wednesday) 
    { 
     std::cout << "Today is Wednesday" << std::endl; 
    } 
} 

Frage> Ich habe Tonnen von Code gesehen, dass Code One zu tun, um den Vergleich von boost::date_time verwenden. Basierend auf dem C++ - Standard ist die Verwendung der Enumeration falsch. Ich habe eine Lösung als Code Two zur Verfügung gestellt.richtige Art und Weise Enum Elemente der `Auftrieb siehe :: date_time`

Kann mir jemand einen schnellen Blick geben und sehen, ob es richtig ist, einen Vergleich zu machen?

Danke

Antwort

1

EDIT: Korrektur

Verwendung

boost::date_time::Wednesday 

ich überhaupt nicht, welche Art as_enum aussehen() zurückgegeben. Fixed it, kompiliert & funktioniert (auf MSVC2k10, Boost 1.48.0 selbst gebaut)

EDIT2: Sie finden es vergraben innerhalb boost/date_time/gregorian/greg_facet.hpp.

namespace boost{ 
namespace gregorian{ 
    typedef boost::date_time::weekdays weekday_enum; 
} 
} 

Wie dem auch sei der relevante Teil für den Rest der Informationen ist, dass es eine boost :: DATE_TIME :: Wochentage :: Mittwoch, aber wir Wochentage nehmen.

Aufzählungen sind im Grunde wie:

enum foo { bar = 1, barre = 2, barred = 3 }; 
// Is sort-of the same as 
typedef static const int foo; 
foo bar = 1; 
foo barre = 2; 
foo barred = 3; 

foo kein Namespace ist, noch ist es eine Struktur, oder so etwas, ist es eher ein Typname.

Ich weiß, es ist nicht genau das gleiche, aber es kann auch für den Zweck der Verwendung von ihnen sein. Mit Hilfe der weekday_enum Qualifier in einer Art wie das im Grunde dem Compiler ein klein wenig Müll geben zu analysieren, ist es wie wenn man sagt:

typedef int foo; 
struct S { 
    static foo var; 
} p; 

p.foo::var = 4; // Does this make sense? Nope... 
+0

Nr boost :: gregorian :: greg_weekday :: Mittwoch Fehler C2039 verursacht: ‚Mittwoch ': ist kein Mitglied von' boost :: gregorian :: greg_weekday ' – q0987

+0

@ q0987 sorry, mein Fehler, behoben. Ich habe nicht überprüft, welchen Typ as_enum() zurückgegeben hat. –

Verwandte Themen