草庐IT

func_returning_a_tuple

全部标签

c++ - std::tuple 中的空类

Thesizeofanyobjectormembersubobjectisrequiredtobeatleast1evenifthetypeisanemptyclasstype[...],inordertobeabletoguaranteethattheaddressesofdistinctobjectsofthesametypearealwaysdistinct.cppreferencequote这个我就知道了。我刚发现的是一些库类型,如std::tuple不使用任何大小来包含空类。这是真的?如果是,那怎么样?编辑:在阅读了@bolov对他的回答的最后注释后,我还有一个问题:因为Em

c++ - 使用 std::tuple 构建基于 vector 的数据集请引用 variadic-templates

我想制作一个类模板如下:templateclassVectorTuple;例如,VectorTuple将实例化为Tuple,vector,vector>我对可变参数模板不熟悉。最糟糕的方法是从中复制代码并修改它。有没有一种简单的方法可以直接使用std::tuple来定义我的VectorTuple。 最佳答案 如果您正在寻找typedefvariadic-templates类型,那么,templateusingVectorTuple=std::tuple...>;现在你可以像这样使用它了VectorTupleobj;

c++ - "error: ’ myfn' declared as function returning a function"是什么意思?

我正在尝试编写一个返回函数指针的函数。这是我的最小示例:void(*myfn)(int)()//Doesn'twork:supposedtobeafunctioncalledmyfn{//thatreturnsapointertoafunctionreturningvoid}//andtakinganintargument.当我用g++myfn.cpp编译它时,它打印出这个错误:myfn.cpp:1:19:error:‘myfn’declaredasfunctionreturningafunctionmyfn.cpp:1:19:warning:extendedinitializerli

c++ - 带有 std::tuple 数组的 std::array 不完整类型错误

我在使用C++11时遇到了一些奇怪的行为std::array.当我尝试使用std::array,6>myTuples;进行编译时作为成员变量,我得到这些错误:mingw32\4.7.2\include\c++\array:-1:Ininstantiationof'structstd::array,6u>':mingw32\4.7.2\include\c++\array:77:error:'std::array::_M_instance'hasincompletetype我不确定这是否有任何改变,但它所在的类是从另一个模板类派生的模板类。模板参数是unsignedintan确定prote

c++ - 为什么 libstdc++ 以相反的顺序存储 std::tuple 元素?

根据Link,关于std::tuple...libstdc++alwaysplacesthemembersinreverseorder,andlibc++alwaysplacesthemembersintheordergiven假设这是真的,是否有libstdc++使用倒序的原因(历史原因或其他原因)?额外奖励:这两个实现是否曾因任何原因更改其std::tuple顺序? 最佳答案 参见thisanswer为什么libc++选择前向顺序。至于lib​​stdc++为什么选择逆序,大概是因为variadicstemplatepropos

c++ - C++11 是否保证 return 语句中的局部变量将被 move 而不是复制?

#includeusingnamespacestd;structA{A(constvector&){}A(vector&&){}};Af(){vectorcoll;returnA{coll};//WhichconstructorofAwillbecalledasperC++11?}intmain(){f();}是coll一个xvalue在returnA{coll};?C++11是否保证A(vector&&)将在f时调用返回? 最佳答案 C++11不允许coll从中move。它只允许return中的隐式move当你做return时的陈

c++ - 成员初始化列表 : initialize two members from a function returning a tuple

memberinitializerlist中的多个成员是否可以从函数获得的元组中初始化?随着通过元组返回多个值变得越来越流行,我希望有一个解决方案。除了语言限制,我看不出有什么其他原因无法做到这一点。这是我所拥有的mcve:autonew_foo(std::size_tsize)->std::tuple,int*>{autobuffer=std::make_unique(size*sizeof(int)+8);autobegin=static_cast(static_cast(buffer.get()+4));returnstd::make_tuple(std::move(buffer

c++ - QtCreator 构建返回 collect2 : ld returned exit status 1

在QtCreator中构建几个不同的项目时,我遇到了以下构建错误:collect2:ldreturned1exitstatus仅更改一些内容(不应更改构建中的任何重要内容)后,如果它已经出现,它将消失,如果它不存在,它将出现。在我当前的学校项目程序中,我正在尝试编译rock03.cpp。它是构建中唯一的文件,并且具有main()方法。我刚刚成功运行它,然后回去更改一些if()的顺序,现在,我只收到两个相关警告:overridingcommandsfortarget'rock03.o'和ignoringoldcommandsfortarget'rock03.o'连同有问题的错误。有人知道

c++ - 错误处理 : return value vs exception in C++

在询问捕获“除以0”异常的过程中,我发现使用C++,我们无法做到这一点。我的意思是,除以0不会抛出std::exception。我发现的一些提示是我必须检查值,然后自行抛出异常。我说这很令人困惑,因为我认为C++采用异常思想是为了取代“良好的旧C/UNIX通过返回值方法报告错误”。这是我的问题问题1:为什么C++在除以0时不会抛出std::exception错误?这背后有什么原因吗?Q2:通常,C++用户使用什么错误处理方案?总是报错,异常是除以0错误?Q3:一般来说,OOP语言更喜欢(甚至强制)使用异常。这是正确的吗? 最佳答案

c++ - 以自然(非反向)顺序将函数应用于 std::tuple 中的元素

我需要为任意元组中的每个元素调用模板或重载函数。准确地说,我需要在元组中指定的元素上调用此函数。例如。我有一个元组std::tuplet{1,2.0f};和功能classLambda{public:templatevoidoperator()(Targ){std::cout我需要一些结构/函数Apply,如果像Apply()(Lambda(),t)这样调用会产生:1;2.0f;而不是2.0f;1;.请注意,如果将“原始”参数包传递给函数,我知道解决方案,并且我知道如何以相反的顺序为元组执行此操作。但是以下部分特化的尝试Apply失败:templateclassForwardsAppli