草庐IT

c++ - 使用 mpl::vector 定义 boost::variant 类型

我正在使用库boost::variant来存储大量类型。随着字数越来越多,我很快就要达到20字的极限了。在文档中,似乎可以使用mpl::vector定义变体,它允许超过20种类型(如果我是正确的,最多50种)。我试图像这样替换我的变体定义:#include#includetypedefboost::mpl::vector,relative_point,relative_point,std::string,color,group,dictionnary,reference,line,strip,text,font>variant_mpl_vec;typedefboost::make_va

c++ - 在索引处分配 boost::mpl vector_c 元素的惯用方式

我有mpl::vector_c我想“分配”位置3的元素,比如说我想将它设置为30。因此,我必须写一个元函数获取和索引、vector和新值并返回修改后的序列。我最终得到了以下解决方案templateclassassign_element{typedeftypenamempl::begin::typebegin;typedeftypenamempl::advance>::typepos;typedeftypenamempl::erase::typesequence2;typedeftypenamempl::begin::typebegin2;typedeftypenamempl::adva

c++ - BOOST MPL 添加两个 list_c 对象导致意外行为

我有以下代码:#include#include#include#include#include#include#include#include#includeusingnamespaceboost::mpl;typedeflist_cevens;typedeflist_cprimes;typedeflist_csums;typedeftransform>::typeresult;BOOST_MPL_ASSERT((equal>));intmain(){std::cout它编译,所以BOOST_MPL_ASSERT成立。但是,运行它时,main函数中的断言失败。这是什么意思?包含相同元素

c++ - 如何检查类型是否为 mpl::apply-able?

如果我有类型,T,看起来像Foo,我能做到mpl::apply::type得到Foo.但是如果T是一个完整的类型,比如Foo,然后mpl::apply::type不会编译。我想编写一个元函数,如果可能的话将应用一个类型,否则返回该类型。所以像这样:templatestructmaybe_apply:eval_if_c,mpl::identity>{};我可以在???s中放什么,这样它就能达到我想要的效果? 最佳答案 免责声明:我远不是MPL方面的专家,所以我不能保证这是解决这个问题的最佳方法(或者即使它是正确的,它至少看起来是有效的

c++ - 如何在 rascal MPL 中使用 SDF 的 {avoid}

我正在尝试使用RascalMPL设计一个孤岛语法,但我遇到了一个问题:在SDF中实现IslandGrammar时,一种非常常见的方法是使用{avoid}属性定义“包罗万象”的产水量。这会阻止解析器在其他适用的情况下使用此产生式。这允许指定一个可以被其他产品覆盖而不会产生歧义的默认行为。一个非常简单的例子是:contextfreesyntaxChunk*->InputWater->Chunklexicalsyntax~[\t\n\]+->Water{avoid}//avoidtheWaterproduction我尝试使用RascalMPL重现此行为。我的目标是创建一个孤岛语法,将所有条件

c++ - MPL替换而不类型转换聚变容器

我有这门课structMyChildrenNeedsSpace:HaveChildren{typedefchildrenListTypecontext;constcontextchildren;MyChildrenNeedsSpace():children("this","sentence","needs","spaces"){std::cout它使用CRTP允许HaveChildren类访问其子成员变量。childrenListType是继承自boost::fusion::vector的类。我想以编程方式使子成员变量在每个字符串之间包含一个空间类。所以如果我输入:children变成

c++ - 如何使用 mpl 技术启用构造函数

我不太了解boost::enable_if以及如何使用它进行构造函数切换。代码是这样的:structNullType{};structTestType{};structNonNull{};templatestructTemplateStruct{TemplateStruct(inti,typenameboost::enable_if,void*>::typedummy=0){std::cout,void*>::typedummy=0){std::cout(1);TemplateStruct(1,2);return0;}我要归档的是以下内容。它希望第一个Ctor仅在给出NullType时

c++ - boost::mpl::vector - 获取类型的基本偏移量

是否有可能获得mpl::vector的偏移量?在执行mpl::find之后在上面?换句话说,我想做的编译时间等同于:#include#include#includeintmain(){typedefstd::vectorv_type;v_typev_int(3);v_int[0]=1;v_int[1]=2;v_int[2]=3;v_type::iteratorit=std::find(v_int.begin(),v_int.end(),3);std::cout否则,我输入mpl::vector有一个type_trait::ordinalconst硬编码,我想尽可能避免这种情况。重要提示

开源许可协议:GPL、LGPL、AGPL、MPL和BSD、MIT、Apache

概述一、开源许可证的分类开源许可证分为2种类型:宽松型和著作权型。1、宽松型(Permissive):该类许可证往往只要求被许可方保留原作品的版权信息,对用户施加的限制较少,衍生软件可以成为私有软件,如Apache、MIT、BSD系列许可证。由于这类许可证允许衍生软件闭源,对商业化非常友好,因此广受欢迎。2、著作权型(copyleft):也称为互惠型、强保护型,要求对软件的修改和扩展,必须按照获得该软件的许可证进行开源,旨在促进开发人员的合作,保护源代码的自由共享,如GPL系列许可证。对于强制开源的许可证,使用要慎重,因为违反开源许可证被起诉已经有很多判例。进一步,可以区分为强著佐权和弱著佐权

c++ - 生成巨大的 Boost.MPL 类型序列

考虑以下自动生成Boost.MPL类型序列(列表或vector)的代码。#include//cout#include//for_each#include//identity,make_identity#include//int_#include//list#include//next#include//push_front#include//vectortemplatestructiota_n;templatestructiota_n:boost::mpl::list//canchangethistoboost::mpl::vector{};templatestructiota_n:b