草庐IT

c++ - 从 std::tuple 成员中移除引用

我在STL元组的帮助下实现了一些变量的保存/恢复功能,如下所示:doublea=1,b=2;intc=3;autotupleRef=std::make_tuple(std::ref(a),std::ref(b),std::ref(c));//hereI'msavingcurrentstateofa,b,cstd::tuplesaved=tupleRef;//heregoesblockofcode,wherea,b,andcgetspoiled......................////nowI'mrestoringinitialstateofa,b,ctupleRef=save

C++ 使嵌套元组 "plain"/"flatten"

问题:使元组的元组“简单”的最佳方法是什么?例如。一维。案例1templateautoprocess_field(Field&&field){//oranotherstd::get(field)...returnstd::forward_as_tuple(field.fst,field.snd,field.thrd,field.fth);}templateautoiterate_record(std::index_sequence,Rec&&rec){returnforward_as_tuple(process_field(std::get(forward(rec).data))...

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++ - 带有模板参数的 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++ - 如何创建 std::tuple 的别名?

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

c++ - 我可以在这里避免模板递归吗?

我为元组写了一个for_each:templateenable_if_t::valuefor_each(Tuple&,F&&){}template::value>enable_if_t::value>=end>for_each(Tuple&t,F&&f){f(get(t));for_each(t,forward(f));}[LiveExample]但是Yakk'sanswertothisquestion给出了一个很好的例子,说明如何处理在所有tuple值上运行lambda非递归:namespacedetail{templatevoidfor_each_arg(F&&f,Args&&..

c++ - 正在访问指针元组的元组和线程安全的互斥锁

给定std::tuple,usingTuple1=std::tuple>;usingTuple2=std::tuple>;std::tupletuple;还有函数,voidbaz(){autotup=std::get(tuple);std::lock_guardlk(*std::get(tup));//Dosomethingwithstd::get(tup)andstd::get(tup)}根据this关于SO访问std::tuple的问题本质上不是线程安全的,但是在示例代码的情况下呢?是否有可能发生未定义/奇怪的事情?这是假设FooN和BarN仅在锁定后才被访问。