我如何转发声明boost ::精神统治
How do I forward declare a boost::spirit rule?
这是一个非常简单的boost::spirit
示例,演示了我遇到的问题 - 当我编译时,我会得到'parsers::parseTest': redefinition; multiple initialization
-如何转发声明规则?使用2.5.2
如果很重要。
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/adapted/adt/adapt_adt.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 <string>
struct test
{
int a;
int b;
};
BOOST_FUSION_ADAPT_STRUCT(test, a,b)
namespace parsers
{
typedef std::string::const_iterator it;
using namespace boost::spirit::qi;
const rule<it, test()> parseTest;
}
namespace parsers
{
typedef std::string::const_iterator it;
using namespace boost::spirit::qi;
const rule<it, test()> parseTest = int_ >> ',' >> int_;
}
常数声明 const rule<it, test()> parseTest;
也是其定义,在此代码中,它使用默认构造函数来初始化它。只需省略那条线即可。
另外,如果要在另一个源文件中使用initializer提供parseTest
定义,则必须将const
声明为 extern
,因为 const
在global和名称空间范围范围内意味着内部链接( static
)。
// .h
namespace parsers {
extern const rule<it, test()> parseTest;
}
// .cc
const rule<it, test()> parsers::parseTest = int_ >> ',' >> int_;
相关文章:
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 隐式声明的 boost::iostreams::mapped_file_source 已被弃用
- 如何使用 Boost.Hana 声明成员变量
- boost::hana 转发声明标头的用例是什么?
- 如何将前向声明与 boost::msm 一起使用以避免循环依赖?
- 使用 boost program_options时,如何确保声明具有C++的存储类或类型说明符?
- 在此范围内未声明C boost -_______SERT_FAIL
- 声明“const”“boost::range”的正确方法
- 我如何转发声明boost ::精神统治
- Boost MPL-按顺序声明每种类型的类
- 为什么 boost::qi 规则的属性必须用括号声明?
- 如何声明Boost范围适配器(例如MAP_VALUES)
- 正向声明boost.type_erasure引用类型
- boost:asio ::UnregisterWaitEx 尚未声明
- 使用 boost::spirit 解析类似 c 结构的声明
- 为什么预先声明 std::basic_string<T> 会破坏 boost::regex?
- boost::shared_ptr::shared_ptr(const boost::shared_ptr&)' 被隐式声明为已删除
- Boost::Python Boost:的正向声明:Python::对象抛出Python TypeError
- 开始使用boost-cpu_timer时,错误:“boost::timer::cpu_timer”尚未声明
- C++/boost:声明一个封装的shared_array