jjzjj

c++ - SFINAE:函数模板优化

我想用成员函数模板以某种方式迭代一个元组(以便稍后从给定的模板类型T创建一个新类型的元组)。但是,没有使用中断条件(函数)所以我得到这个错误:invaliduseofincompletetype:'classstd::tuple_element>'问题似乎是,即使N==size的元组,std::tuple_element_t也被评估为N!=size并且不作为SFINAE处理。两个示例都显示了不同的无效解决方案。我做错了什么?注意:省略了使用is_same评估的函数以最小化示例。#include#includetemplatestructA{usingtuple=std::tuple;s

c++ - 创建一个包含可变类型的元组

今天我试图在编译时创建一个有点具体(至少对我而言)的元组。我有一些基本的结构,比方说:structFoo1{intdata;};structFoo2{intdata;};structFoo3{intdata;};还有另一个结构,但带有一些模板内容:templatestructMetadata{usingtype=T;std::bitsetbitset;};所以现在我想创建这种元组:constexprstd::tuple,Metadata,Metadata>test{{0},{0},{0}};但以一种自动的方式,更像是:templateconstexprautomake_metadata

c++ - 将函数的返回值存储在元组中

考虑#includetemplateautoexecute(F...f){returnstd::make_tuple(f(0)...);}intfoo(int){return5;}intbar(int){return3;}intmain(){autotuple=execute(foo,bar);}有什么好的解决方法可以让bar返回void?我试过这个,但它不会编译:#includestructVoid{};templateTcheck(Tn){returnn;}Voidcheck(void){returnVoid{};}templateautoexecute(F...f){return

c++ - 哪个更好 : returning tuple or passing arguments to function as references?

我创建的代码中有两个函数returnValues和returnValuesVoid。一个返回2个值的元组,另一个接受参数对函数的引用。#include#includestd::tuplereturnValues(constinta,constintb){returnstd::tuple(a,b);}voidreturnValuesVoid(int&a,int&b){a+=100;b+=100;}intmain(){auto[x,y]=returnValues(10,20);std::cout我读到了http://en.cppreference.com/w/cpp/language/st

c++ - 将 std::variant 转换为模板类实例的 std::tuple

transform_v2t下面代码中的函数构建了模板类A实例的元组:templatestructA{Tval;};templateclassT,std::size_t...index>inlineconstexprautotransform_v2t(std::index_sequence){returnstd::make_tuple(T>()...);}templateclassT>inlineconstexprautotransform_v2t(){returntransform_v2t(std::make_index_sequence>());}typedefstd::varian

c++ - 带有模板参数的 make_tuple 不编译

考虑这段代码:#includeintmain(){inti;longk;autotup1=std::make_tuple(i);//Compilesautotup2=std::make_tuple(k);//Compilesautotup3=std::make_tuple(i);//Doesnotcompileautotup4=std::make_tuple(i+0);//Compilesautotup5=std::make_tuple(i);//Compiles}为什么autotup3=...不编译?显然,make_tuple(...)想要一个右值引用作为它的参数;但是为什么?(我使

c++ - 完美转发和 std::tuple

考虑以下代码:#include#include#include//A.templatevoidf(constchar*msg,Args&&...args){std::coutvoidf(constchar*msg,std::tuple&&t){std::coutg()const{returnstd::make_tuple(2,4,12345);}};intmain(){f("First",2,5,12345);f("Second",std::make_tuple(2,5,12345));boothe_boo;f("Third",the_boo.g());f("Fourth",std::

c++ - boost::bind 不适用于 boost::tuple::get<N>()

我正在尝试使用boost::bind和STL与boost::tuple,但每次我尝试编译时都会收到以下错误。error:callofoverloaded‘bind(,boost::arg&)’isambiguous你知道我在这里做错了什么吗?为什么只针对boost::arg?谢谢AFG#include#include#include#include#include#include#includeintmain(intargc,constchar**argv){usingnamespaceboost::assign;typedefboost::tupleeth_array;std::ve

c++ - 如何创建 std::tuple 的别名?

我正在学习C++,我想知道如何为std::tuple创建别名。我想做你可能用std::tuple做的事情,但使用另一个名字。可能吗?谢谢。 最佳答案 templateusingmy_tuple=std::tuple;Livedemolink. 关于c++-如何创建std::tuple的别名?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/25545334/

c++ - 将 std::tuple<T...> 转换为 T

所以我得到了一个std::tuple,我想创建一个接受T...的函数指针,目前这就是我所拥有的;templateusingFunctionPointer=void(*)(Arguments...);usingFunctionPtr=FunctionPointer::type,typenamestd::tuple_element::type,typenamestd::tuple_element::type>;但是,如果不手动输入0,...,tuple_size::value中的每个索引,我似乎无法找到执行此操作的方法。.FunctionPtr在上下文中定义,其中V=std::tuple(