草庐IT

func_returning_a_tuple

全部标签

C++ 将 std::tuple<A, A, A...> 转换为 std::vector 或 std::deque

在我正在编写的简单解析器库中,使用std::tuple_cat组合了多个解析器的结果。.但是,当应用多次返回相同结果的解析器时,将此元组转换为vector或双端队列等容器变得很重要。如何做到这一点?这种元组怎么能std::tuple,std::tuple,std::tuple等被转换成std::vector?我认为使用typename...As可能是可行的和sizeof...(As),但我不确定如何创建一个较小的元组来递归调用该函数。或者如何编写一个从元组中逐个提取元素的迭代解决方案。(因为std::get(tuple)是在编译时构建的)。如何做到这一点?

c++ - 可变参数模板 : producing a tuple of pairs of adjacent elements

我的目标是做一些事情,例如,pairs()有返回类型std::tuple,some_other_type,some_other_type>我想知道这是否可以通过C++模板元编程实现,以及如何实现。对于实际生成的值,似乎我可以使用tuple_cat递归地连接到输出,但我发现很难表达返回类型,因为它本身是可变的并且实际上是模板参数数量的函数。使情况复杂化的是,如果我走tuple_cat路线,似乎我还必须重载函数以获取要连接的元组,并且连接将在运行时发生,而不是编译时。我在这里是在徒劳地追逐吗? 最佳答案 这是一种方法。鉴于您的类(cla

c++ - 最后一个 return *this c++ 会发生什么?

Time&Time::setHour(inth){hour=(h>=0&&h=0&&m=0&&s我理解级联成员函数调用,但我不明白t.setHour(18).setMinute(30).setSecond(22);被挂起,是否必须将其分配给某些东西,因为它在完成级联后仍会返回*this?为什么这样就可以了? 最佳答案 用作语句的表达式的值被丢弃。这和你写的时候发生的事情是一样的scanf("%d",&i);您确实知道scanf有一个返回值,对吗?中的++i也是如此for(inti=0;i甚至x=5;正在丢弃表达式的结果。有许多带有返

c++ - 通过模板参数给定其长度,在编译时生成相同类型的 std::tuple

在C++中,我如何实现一个带有指示元组长度的int模板参数的函数并生成具有该长度的std::tuple?例如func()returnsstd::tuple();func()returnsstd::tuple(). 最佳答案 这是一个带有别名模板的递归解决方案,它可以在C++11中实现:templatestructtuple_n{templateusingtype=typenametuple_n::templatetype;};templatestructtuple_n{templateusingtype=std::tuple;};t

c++ - 如果 (a) b = c, d = e, return; 为什么这将无法编译?

我沉迷于“无手镯”ifs,就像这样:if(a)b++,c++,d=e;但是一件烦人的事情是return不能成为最后一部分的一部分。凭直觉我觉得这是为什么,但谁能用编程语言术语解释为什么这不会编译?main(){inta,b,c,d,e;if(a)b=c,d=e,return;}如果您关心,请同时解释为什么这样设计,这对我来说似乎是一个缺陷。我可以用C理解,但在C++中它可以被重新设计,而不会与现有的C代码发生重大兼容性损失。只是为了比较:这些将编译并完全按照预期执行:while(a 最佳答案 “逗号”运算符就是一个运算符。左右两边必

c++ - 您可以在编译时将 __func__ 转换为 wchar_t[] 吗?

所以我有这段代码wchar_tfuncName[]=__FUNCTIONW__;但是__FUNCTIONW__的问题是它的名称中包含类信息,而我只需要函数名称。现在__FUNCTIONW__只调用了_CRT_WIDE(__FUNCTION__)这让我觉得我可以调用_CRT_WIDE(__func__)但这给出了一个错误“identifierL__func__isundefined"__func__是一个隐式声明的标识符,当它在函数内部使用时,它会扩展为包含函数名称的字符数组变量。它是在C99中添加到C中的。来自C99§6.4.2.2/1:Theidentifier__func__isi

c++ - 构建 PBRT v2 错误 - 错误 1 ​​错误 U1077 : 'if' : return code '0x1'

我有visualstudio2013社区版,我有pbrt-v2代码库,一直在尝试构建解决方案,但这是我遇到的错误之一(它似乎与nmake相关):NMAKE-Error1errorU1077:'if':returncode'0x1'我不确定该怎么做,因为其他说明似乎不是很清楚。任何帮助将不胜感激!谢谢你,祝你有美好的一天!------------更新--------------------我让它在visualstudio2013上编译和构建。问题是我认为我有过时的PBRT文件。基本上我所做的是通过github查看项目,我认为这应该可行,但后来我注意到你可以在网站上下载最新的pbrt-v2

c++ - std::tuple 和 std::pair 是否支持聚合初始化?

Aggregateinitialization除其他事项外,还需要没有用户提供的构造函数。但是std::tuple和std::pair对有一大组overloadedconstructors.从核心语言的角度来看,这些构造函数是用户提供还是用户声明?使用C++17可以编写(更新/说明:其中nocopy是不能复制或移动的类,例如std::mutex)autoget_ensured_rvo_str(){returnstd::pair(std::string(),nocopy());}编辑:不,这是不可能的,如答案链接和下面的答案中所述。这需要聚合初始化(对于上下文:Multipleretur

c++ - std::tie 和 std::forward_as_tuple 有什么区别

对于一个给定的类,如果我想写所有的比较运算符,为了避免代码重复,我会这样写:classB{public:booloperator==(Typeconst&rhs)const{returnas_tuple()==rhs.as_tuple();}booloperator!=(Typeconst&rhs)const{returnas_tuple()!=rhs.as_tuple();}//..andsameforotheroperators..private:autoas_tuple()const{returnstd::tie(a,b,c);//allthemembers}};我可以用std:

c++ - 自动检测C++14 "return should use std::move"情况

我的理解是,在C++17中,以下代码片段旨在做正确的事:structInstrument;//instrumented(non-trivial)moveandcopyoperationsstructBase{Instrumenti;};structDerived:publicBase{};structUnrelated{Instrumenti;Unrelated(constDerived&d):i(d.i){}Unrelated(Derived&&d):i(std::move(d.i)){}};Unrelatedtest1(){Derivedd1;returnd1;}Basetest2