草庐IT

c++ - 使用来自可变参数模板类的特定参数调用函数

templateclassMessage{public:Message(Args&&...args){mArgs=std::make_tuple(args...);}std::tuplemArgs;typedefstd::functionHandlerType;voidConsume(HandlerTypehandler){//handler(mArgs);//Howdoesoneunpackthis?}};//TestingcodeMessagemsg(1,2);msg.Consume([](inti,intj){std::cout我正在尝试一个简单的消息传递API,试图为消息和参数

c++ - 从 std::tuple<some_types...> 开始创建子元组

让我们假设一个std::tuple给出。我想创建一个新的std::tuple其类型是在[0,sizeof...(some_types)-2]中索引的类型.例如,假设起始元组是std::tuple.我想获得一个定义为std::tuple的子元组.我对可变参数模板很陌生。作为第一步,我尝试写一个struct负责存放不同类型的原件std::tuple目的是创建一个新的同类元组(如std::tuplenew_tuple)。templatestructtype_list;templatestructtype_list:publictype_list{typedefTtype;};template

c++ - 我们如何在 C++ 中组合返回多个值的函数

这个问题在这里已经有了答案:"unpacking"atupletocallamatchingfunctionpointer(9个回答)关闭7年前。我们如何在C++中编写返回多个返回值的函数?更具体地说,如果一个函数返回一个元组,我们能否将这个函数与另一个不明确接受元组的函数组合起来?例如,在代码中:#include#includestd::tupletuple_ints(intx,inty){returnstd::tuple(x,y);}intadd(intx,inty){returnx+y;}intmain(){std::cout我正在尝试组合函数add和tuple_ints。这正确

c++ - 如何从数组构造元组

我正在设计一个C++库,它从一些实验中读取报告数据的CSV文件并进行一些聚合并输出pgfplots代码。我想让图书馆尽可能通用和易于使用。我还想将它与CSV文件中表示的数据类型隔离开来,并将选项留给用户根据需要解析每一列。我还想避免使用BoostSpiritQi或其他重型解析器。我的简单解决方案是让用户为每一列创建一个类型,并使用一个采用“char*”的构造函数。构造函数对给定的值进行自己的解析,该值是数据中的一个单元格。然后用户传递给我一个类型列表;模式,表示一行数据中的类型。我使用这个类型列表来创建一个元组,其中元组的每个成员都负责解析自己。现在的问题是如何初始化(构造)这个元组。

c++ - 当不相关的类型定义为别名时,对函数的调用是不明确的

看完一篇很棒的文章TrueStory:EfficientPacking我尝试自己实现元组作为练习:#include#include#includetemplatestructtuple_leaf{Tvalue;};templateT&get(tuple_leaf&leaf){returnleaf.value;}templatestructtuple_base;templatestructtuple_base,Ts...>:tuple_leaf...{usingtuple_base_t=tuple_base;template>tuple_base(Args&&...args):tuple

c++ - 如何构建一个 hana::tuple_t<T, T, T, ...> 给定 T 和元素数 n

这似乎是一件相当基本的事情,所以我正在寻找一个或多或少简短、内置且易于阅读的解决方案。我设法构思的最短的事情是hana::unfold_left(hana::int_c,[](autocount){returnhana::if_(count==hana::int_c,hana::nothing,hana::just(hana::make_pair(count-hana::int_c,hana::type_c)));});远非简短和可读... 最佳答案 正如@jv_所指出的,hana::replicate可以做到这一点。引用文档中的示

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仅在锁定后才被访问。

c++ - 返回所选类型的元组的类型函数

我已经实现了一个类型函数Tuple,它将My_enum值列表转换为相应类型的std::tuple:#includeenumMy_enum{t_int,t_double};//Bind_typeisatypefunctionthatgivenaMy_enumreturnsthecorrespondingtypetemplatestructBind_type;templatestructBind_type{usingtype=int;};templatestructBind_type{usingtype=double;};//Tupleisatypefunctionthatgivenate

c++ - C++0x 中 std::make_tuple 的问题

使用VisualStudio10编译以下程序时,出现了很多编译错误:#include"stdafx.h"#include#include#include#includeint_tmain(intargc,_TCHAR*argv[]){typedefstd::tuplekey_t;typedefstd::mapmap_t;map_tthe_map;autok=std::make_tuple("one","two");the_map[k]="thevalue";autoq=std::make_tuple("one","two");autoi=the_map.find(q);std::cou

c++ - 如何为 boost::tuple 编写一个 `<<` 运算符?

在下面的示例代码中,它表明可以从第一个模板参数隐式创建boost::tuple。因此,我无法写运算符,因为它变得模棱两可。我也不明白为什么ostringstream&也是模棱两可的。这没有任何隐式构造。为什么这也会产生模棱两可的错误?#include#include#include#includeusingnamespacestd;classMyclass{};typedefboost::tupleMytuple;ostringstream&operator();//os_();//ErrorbecauseintisimplicitlyconvertedintoMytuple.WHYY