【问题标题】:Boost Fusion compile failure when number of arguments to BOOST_FUSION_ADAPT_STRUCT is 2当 BOOST_FUSION_ADAPT_STRUCT 的参数数量为 2 时,Boost Fusion 编译失败
【发布时间】:2012-04-02 15:51:56
【问题描述】:

为什么用 g++ -c filename.cpp 编译失败:

#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_object.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/io.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/spirit/include/phoenix_stl.hpp>
#include <boost/variant/variant.hpp>
#include <iostream>

namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
namespace lambda = boost::lambda;

using namespace std;


struct Intensity
{
    int intensity_;
};

BOOST_FUSION_ADAPT_STRUCT(
    Intensity,
    (int, intensity_)
)

template <typename Iterator>
struct InternalParser : qi::grammar<Iterator, Intensity(), ascii::space_type>
{
    InternalParser() : InternalParser::base_type(intensity)
    {
        intensity %= qi::int_;
    }
    qi::rule<Iterator, Intensity(), ascii::space_type> intensity;
};

typedef InternalParser<string::const_iterator> TheParser;

TheParser parser;

但如果我向结构强度添加一个新字段,它会起作用:

#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_object.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/io.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/spirit/include/phoenix_stl.hpp>
#include <boost/variant/variant.hpp>
#include <iostream>

namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phoenix = boost::phoenix;
namespace lambda = boost::lambda;

using namespace std;


struct Intensity
{
    int dummy_;
    int intensity_;
};

BOOST_FUSION_ADAPT_STRUCT(
    Intensity,
    (int, dummy_)
    (int, intensity_)
)

template <typename Iterator>
struct InternalParser : qi::grammar<Iterator, Intensity(), ascii::space_type>
{
    InternalParser() : InternalParser::base_type(intensity)
    {
        intensity %= qi::int_ >> qi::int_;
    }
    qi::rule<Iterator, Intensity(), ascii::space_type> intensity;
};

typedef InternalParser<string::const_iterator> TheParser;

TheParser parser;

g++ 版本: gcc 版本 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)

Boost 版本:1.41.0

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    这是 boost 1.41.0 中的一个错误。我用 1.49.0 编译了第一个示例,它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多