jjzjj

c++ - 如何在 boost::spirit 规则中使用 boost::tuple 作为属性?

我在boost::spirit中有以下规则:typedefboost::tupleEntry;qi::ruleentry;entry=qi::int_>>qi::int_;但是第二个int没有写入元组。有没有办法让它工作而不必使用boost::fusion::tuple?如果我使用std::pair就可以,那么为什么我不能使用boost::tuple?这是一个完整的编译示例:#include#include#include#includenamespaceqi=boost::spirit::qi;//works://#include//typedefstd::pairEntry;//d

c++ - 所有 std::tuple 构造函数都是必需的吗?

std::tuple包含以下构造函数:explicittuple(constTypes&...args);templateexplicittuple(UTypes&&...args);两者都有相同的描述,因为它们使用args中的相应值初始化每个元素。唯一的区别是在第二个参数被转发。根据我对右值引用的了解,我不明白为什么需要第一个版本,因为可以将相同的参数传递到第二个版本。引用将被转发,没有人会更聪明,特别是因为没有提到移动语义。谁能解释是什么让这两个构造函数成为必需? 最佳答案 这是一个简化的例子:templatestructfoo

c++ - 元组实现是否有优化的布局?

阅读时this我对某种级别的元编程可以为您的类布局做些什么感到惊讶。我必须承认,我没有完全理解建议的最佳布局是什么,如果我必须说明我的理解,那就是:orderingclassmemberbydescendingalignmenti.e.thetypewiththegreatestalignofresultgoesfirstetc如果我弄错了,请随时纠正我(如果您能简短地解释为什么会发生这种情况,那就更好了,我无法在我的问题中复制粘贴大量的基本原理),但我的问题是关于另一个主题:std::tuple的库实现有这样的布局优化吗?如果没有,是否有任何标准代数数据类型可以这样做,除了编写这样的

c++ - std::tuple 和 boost::tuple 之间的转换

给定一个boost::tuple和std::tuple,你如何在它们之间进行转换?也就是说,您将如何实现以下两个功能?templateboost::tupleasBoostTuple(std::tuplestdTuple);templatestd::tupleasStdTuple(boost::tupleboostTuple);看起来很简单,但我找不到任何好的解决方案。我尝试了什么?我最终用模板编程解决了这个问题。它似乎适用于我的具体设置,但感觉不对(太冗长),我什至不确定它是否真的适用于所有情况(我稍后会谈到这一点)。无论如何,这是有趣的部分:templatestructCopySt

c++ - 如何将 std::tuple 类型与 boost::mpl 算法一起使用?

boost::mpl算法似乎无法在开箱即用的std::tuple类型上工作,例如,以下不编译(boost-1.46.0,g++快照2011-02-19):#include#include#includenamespacempl=boost::mpl;typedefmpl::vectortypes;static_assert(mpl::contains::value,"vectorcontainsbool");typedefstd::tupletypes2;//thefollowingdoesnotcompile://error:noclasstemplatenamed‘apply’in

c++ - 空嵌套元组错误

#include#includeintmain(){autobt=std::make_tuple(std::tuple(),std::tuple>());//Line1autobt2=std::make_tuple(std::tuple(),std::tuple());//Line2}为什么第1行给出编译错误,而第2行编译正常?(在Gcc和Clang中测试)是否有可能的解决方法?clang的错误信息/usr/include/c++/4.6/tuple:150:50:error:ambiguousconversionfromderivedclass'std::_Tuple_impl,st

c++ - 是否可以简单地复制::std::tuple-like 类模板?是否存在实现?

我需要一个简单可复制的类似元组的类,但不存在合适的实现,我自己想不出一个,我认为甚至不可能。原因是引用。::std::tuple可以保存引用,但平凡可复制的元组可能不能,因为它可能没有非平凡的构造函数,并且必须在构造函数中初始化引用类似元组的类并存储引用包装器将使类似元组的类变得不平凡。我的问题在标题中。 最佳答案 使用reference_wrapper存储引用是entirelypossible:std::reference_wrapperisguaranteedtobeTriviallyCopyable.(sinceC++17)只

c++ - 将结构拆分为元组

这个问题在这里已经有了答案:TMP:howtowritetemplatecodewhichconvertsanystructintoatuple?(1个回答)关闭4年前。问题很直接,我如何生成:std::tuple如果我知道类型:structFoo{floata;intb;doublec;};我如何在这两种转换中检索数据?

c++ - 来自元组的构造函数参数

如果我有这样的结构:structThing{intx;inty;boola;boolb;}然后我可以创建一个Thing对象,方法是:Thingt{1,2,true,false};。但是,如果我有一个元组,那么我会做类似的事情:std::tupleinfo=std::make_tuple(1,2,true,false);Thingt{std::get(info),std::get(info)..//andsoon有更好的方法吗? 最佳答案 我们可以创建一个通用工厂函数,用于从类似元组的类型(std::tuple、std::pair、s

c++ - 访问 boost::tuple 的成员

我正在尝试实现一个vector,例如vector>day;我想访问元组的第一个元素来检查条件。有人可以告诉我该怎么做吗?我是新来的。提前致谢。 最佳答案 #include#include#includeintmain(){std::vector>v;v.push_back(boost::make_tuple(1,2,3));std::cout(v[0])(v[0])(v[0]) 关于c++-访问boost::tuple的成员,我们在StackOverflow上找到一个类似的问题: