2012-04-11 8 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; 
    } 
} 

質問>私はboost::date_timeの比較を行うためにコードワンを使用したコードのトンを見てきました。 C++標準に基づいて、列挙型の使用は間違っています。私はコード2のような解決策を提供しました。正しい方法:: date_time`

誰かが私にクイックルックを与えて、それが本当であるかどうかを比較することができますか?

あなた

答えて

1

EDITありがとう:私は(何種類as_enumを見ていなかった補正

使用

boost::date_time::Wednesday 

)が返されます。これを修正し、&をコンパイルしてください(MSVC2k10では、自己構築のブースト1.48.0)

EDIT2:boost/date_time/gregorian/greg_facet.hppに埋め込まれています。

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

は、とにかく情報の残りのための関連部分は、ブースト:: DATE_TIME ::平日::水曜日があるということですが、私たちは平日を取ります。

列挙型は基本的に好きです。

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は、名前空間ではなく、またそれは、構造体、またはそのようなもので、それは型名の詳細です。

正確にはではありませんが、それを使用する目的でもかまいません。基本的に解析するために、コンパイラにゴミのほんの少しを与えているものと同様のタイプの内側weekday_enum修飾子を使用して、それは言ってようなものだ:

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

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

号ブースト::グレゴリオ:: greg_weekdayを::水曜日には、エラーC2039が発生します。「水曜日':' boost :: gregorian :: greg_weekday 'のメンバーではありません。 – q0987

+0

@ q0987申し訳ありませんが、私のせいです。私はas_enum()が返す型をチェックしなかった。 –