草庐IT

func_returning_a_tuple

全部标签

c++ - 检测类型是否为 std::tuple?

目前我有两个功能:templateboolf(Type*x);templateboolf(std::tuple*x);有什么方法可以将这两个函数与一个额外的模板参数合并,该参数指示传递的类型是否为元组?templateboolf(Type*x); 最佳答案 当然,使用is_specialization_of(链接取自here并已修复):template::value>boolf(Type*x);然而,问题是,你真的想要这样吗?通常,如果您需要知道一个类型是否是元组,您需要对元组进行特殊处理,这通常与它的模板参数有关。因此,您可能希望

c++ - `void f(A<0>, tuple<T *...>)` 不是比 `void f(A<I>, tuple<T *...>)` 更专业吗?

#includetemplatestructA{};templatevoidf(A,std::tuple){}templatevoidf(A,std::tuple){}intmain(){f(A{},std::tuple{});}不是f的第二次重载吗?更专业?g++4.9.2表示调用不明确,clang3.6.0接受它。哪个编译器是对的?有趣的是,如果您更改std::tuple至std::tuple,g++就可以了,这个我没看懂。 最佳答案 根据当前规则,第二个重载更加特化。一些专业A具有合成值@无法与A匹配,但是A可以匹配A(与I=

c++ - boost 是否支持 c++11 的 std::tuple 的序列化?

boost是否支持c++11的std::tuple序列化?我在/boost/serialization/中找不到tuple.hpp头文件我正在使用boost1.52.0(如果需要,很乐意升级,但似乎changesinversion1.53与此无关)。 最佳答案 开箱即用,不。您必须自己编写序列化程序。幸运的是,有人已经这样做了:C++0xtupleboostserialization(也在github中) 关于c++-boost是否支持c++11的std::tuple的序列化?,我们在S

c++ - 为什么 `initializer_list<pair>` 和 `initializer_list<tuple>` 的行为不同?

以下代码编译并运行:#include#include#include#includevoidext(std::initializer_list>>myList){//Dosomething}///////////////////////////////////////////////////////////intmain(void){ext({{1.0,{2.0,3.0,4.0}}});return0;}虽然这个没有:#include#include#include#includevoidext(std::initializer_list>>myList){//Dosomething}

c++ - C/C++ : Calling function with no arguments with function which returns nothing

为什么不能调用不带参数的函数,而函数调用作为不返回任何值的参数(恕我直言,这相当于调用不带参数但不带参数的函数)。例如:voidfoo(void){...}voidbar(void){...}foo(bar())不要误会我的意思,我知道void不是一个值,它不能被视为一个值。按照我的逻辑,这是有道理的,应该可以做到。我的意思是,为什么不呢?有什么理由认为这是不可能的吗? 最佳答案 我不相信我听到的任何理由都是好的。看,在C++中,您可以返回void函数的结果:voidfoo(){//...}voidbar(){//...return

c++ - 让我们分析一下 "collect2: ld returned 1 exit status"?

我知道这表明存在链接器问题,主要是未解析的符号。我知道要解决该问题/摆脱该错误消息,必须提供更多信息。我知道在SO上解决这个问题有很多问题。我的问题旨在帮助理解make和ld,找出什么(和谁)试图用这条线表达什么。collect2:ldreturned1exitstatus“collect2:”是什么意思?它是一个步骤make调用吗?我在我的系统上找不到具有该名称的可执行文件。这是否意味着我正在使用ld?我配置了我的项目/Makefile,以便g++应该进行链接,那么为什么仍然涉及LD谁在写这条消息?制作?ld?g++?是否有一个有意义的可能退出代码列表?

C++11 可变参数模板 : return tuple from variable list of vectors

我想写一些类似于pythonzip(http://docs.python.org/2/library/functions.html)的东西。zip应该接受可变数量的不同类型的vector,并返回一个vector元组,截断到最短输入的长度。例如x=[1,2,3]v=['a','b']我希望输出是一个vector[,]如何在C++11中做到这一点? 最佳答案 急切地做到这一点并且只通过复制非常容易:#include#include#includetemplatestd::vector>zip(std::vectorconst&...vs

c++ - std::get 与 std::tuple 的效率

我很好奇调用std::get的查找时间。在std::tuple需要。一些简短的谷歌搜索(包括通常包含此信息的引用页面)没有结果。我最初的直觉(和恐惧)是元组的递归结构(如果它被实现为可变参数模板)会导致需要N次查找的顺序(对get(t)的调用看起来像t.rest().rest().first()。我希望我能离开这里......再一次,我希望编译器能够对此进行优化,以直接返回正确的偏移量,而不会产生N次调用的开销。基本上我想要的是:运行时是否有特定的保证?这是否限制了std::tuple实现了吗? 最佳答案 效率将与访问结构的成员相当

c++ - 另一个C++学习时刻 : returning strings from functions

我有一些关于C++的基本问题。考虑以下我尝试返回字符串的代码。conststd::string&NumberHolder::getValueString(){charvalueCharArray[100];sprintf_s(valueCharArray,"%f",_value);std::stringvalueString(valueCharArray);returnvalueString;}我正在尝试返回一个字符串,其中包含名为_value的类成员的值。但是,我收到警告说我正在尝试将指针传回局部变量。这当然是一件坏事。如果此时我对C++有足够的了解,这意味着当有人尝试使用它时,我传

c++ - ARM C++ ABI : Constructor/destructor return values

我一直在阅读Clang源代码,并发现了一些关于ARMC++ABI的有趣之处,我似乎无法理解其理由。来自ARMABIdocumentation的在线版本:ThisABIrequiresC1andC2constructorstoreturnthis(insteadofbeingvoidfunctions)sothataC3constructorcantailcalltheC1constructorandtheC1constructorcantailcallC2.(对于非虚拟析构函数也是如此)我不确定C1、C2和C3在这里引用什么...本节旨在修改来自通用(即安腾)ABI的第3.1.5节,但