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;
    }
}

質問>の比較を行うためにCode Oneを使用する大量のコードを見てきましたboost::date_time。C++ 標準に基づくと、列挙型の使用法は正しくありません。Code Twoとして解決策を提供しました。

誰かが私に簡単に見て、比較を行う正しい方法であるかどうかを確認できますか?

ありがとうございました

4

1 に答える 1

1

編集:修正

使用する

boost::date_time::Wednesday

as_enum() が返す型は見ていません。それを修正し、コンパイルして動作します(MSVC2k10、Boost 1.48.0 セルフビルド)

EDIT2: boost/date_time/gregorian/greg_facet.hpp 内に埋もれていることがわかります。

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

とにかく、残りの情報に関連する部分は、boost::date_time::weekdays::Wednesday があるということですが、平日は除外します。

列挙型は基本的に次のようになります。

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...
于 2012-04-11T15:32:22.853 に答える