当前位置:  开发笔记 > 编程语言 > 正文

如何增加boost :: variant可以处理的类型数量

如何解决《如何增加boost::variant可以处理的类型数量》经验,为你挑选了1个好方法。

我正在为verilog语言设计一个解析器,其中一个规则有25个组件,我需要一个大的boost :: variant来保存它:

typedef boost::variant<
 shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 ,  shared_ptr
 > module_item ; 

但是g ++抱怨boost :: variant只能容纳不超过20种类型.

verilogast.h|1129 col 2| error: wrong number of template arguments (25, should be 20)
||   > module_item ; 
||   ^
/usr/include/boost/variant/variant_fwd.hpp|213 col 53| error: provided for ‘template class boost::variant’
||  template < BOOST_VARIANT_AUX_DECLARE_PARAMS > class variant;

我尝试将BOOST_VARIANT_LIMIT_TYPES重新定义为更大的值:

#define BOOST_VARIANT_LIMIT_TYPES 30
#include

但错误仍然存​​在,



1> llonesmiz..:

c ++ 98模式中的clang ++和g ++中的错误(你似乎得到的)很短(而且很遗憾).在c ++ 11中,错误更大,并揭示了关键问题:

错误:类模板'list'的模板参数太多
typedef typename mpl :: list :: type type;

如果查看Boost.MPL文档,您可以看到需要添加:

#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#define BOOST_MPL_LIMIT_LIST_SIZE 30

默认情况下,您只能使列表的大小为30,40或50,如果您需要更多,则必须生成自定义标题.

在Coliru上奔跑

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有