2012-04-11 90 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++标准,枚举的用法不正确。我提供了一个解决方案代码二指`的boost :: date_time`

有人能给我快看,看看它是否是正确的比较方式吗?

谢谢

回答

1

编辑:校正

使用

boost::date_time::Wednesday 

我没看什么类型的as_enum()返回。修正了它,编译&作品(在MSVC2k10上,Boost 1.48.0自建)

编辑2:你会发现它被埋藏在boost/date_time/gregorian/greg_facet.hpp里面。

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

反正对信息的其余部分相关的部分是,有一个boost :: 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

号的boost ::阳历:: greg_weekday ::周三会导致错误C2039:“周三':不是'boost :: gregorian :: greg_weekday' – q0987 2012-04-11 15:43:03

+0

@ q0987的成员抱歉,我的错,修复了它。我没有检查返回什么类型的as_enum()。 – 2012-04-11 16:13:22

相关问题