jjzjj

C++:将元组转换为类型 T

我正在尝试创建一个名为tuple_cnv的类,它带有一个(隐式)转换运算符以从元组构造任何对象(如C++17std::make_from_tuple函数),但具有递归性质,以这种方式,如果一个元组由其他元组组成,它会将任何“内元组”转换为tuple_cnv以允许递归就地构造目标类型:#include#include#include#includestructA{inti1,i2,i3;};structB{Aa1,a2;};templatestructtuple_cnv;templatestructtuple_cnv>{usingtuple_t=std::tuple;std::refer

c++ - 实例化模板参数的参数包

我想制作一个模板,它接受一组模板并使用相同的参数包实例化它们。不幸的是,我似乎无法弄清楚如何在模板参数包中扩展参数包。如何编译?#include#includetemplatetypename...Args>structTupleTupleMaker{templateusingNewTupleTuple=typenamestd::tuple...>;};templateusingtuple1=std::tuple;templateusingtuple2=std::tuple;usingexpected=std::tuple,std::tuple>;usingactual=TupleTu

c++ - 选择模板参数包中的每个偶数(或奇数)参数

我想允许使用我正在编写的类作为模板参数指定类型列表以及这些类型的分配器列表,其方式是类型位于奇数位置,分配器位于偶数位置:templateclassMyClass{//Stuffinside}intmain(){MyClassc1;MyClassc2;MyClassc3;//Andsoon....}在内部,存储类型vector的元组是有意义的:std::tuple...>m_storage_;和一个分配器元组用于使用:std::tuple...>m_storage_;我如何在代码中实际声明这些元组?理论上我需要以某种方式选择参数包中的每个奇数/偶数类型-这可能吗?

c++ - G++ 4.5.0 中的 std::forward_as_tuple

我迫切需要函数std::forward_as_tuple,但仅限于使用GCC4.5.0(我知道这对自己来说是一个糟糕的情况,但它会为我解决很多问题,所以请将尖刻的言论保持在最低限度)。header似乎不包含函数(它应该包含),所以我的问题是:它是否隐藏在其他标题中?(这以前发生过,但很难确定。)是否可以推出自己的实现方案?即:在GCC4.5.0中实现的c++11部分是否可以实现?如果有人真正知道如何做到这一点,将获得奖励。 最佳答案 实现很简单:template/*constexpr*/tupleforward_as_tuple(E

c++ - tuple_size 的特化不一致

当为某个模板显式特化tuple_size和tuple_element时,我意识到§14.5.1/4,它是这样写的Inaredeclaration,partialspecialization,explicitspecializationorexplicitinstantiationofaclasstemplate,theclass-keyshallagreeinkindwiththeoriginalclasstemplatedeclaration(7.1.6.3).似乎违反了标准本身:我是否遗漏了什么(例如,标准规定class-key“仅供说明”并且应在实际实现中达成一致)?

c++ - 是否可以交错参数包?

是否有可能,使用C++11/14/1z,有一个带有两个参数包的模板化结构,并在其中实例化一些其他的模板化结构,两个参数包是交错的?即如果第一个包是T1_1、T1_2、T1_3,第二个包是T2_1、T2_2和T2_3,交错包将是T1_1、T2_1、T1_2、T2_2、T1_3、T2_3?我的猜测是“不”,因为省略号不能应用于两个参数包元素指示符;但也许某种元组构造或递归实例化技巧可以奏效?编辑:让我明确地假设包具有相等的长度(sizeof...值)。如果它不会使事情变得更加复杂,那么针对不同长度的包装的解决方案会很好。 最佳答案 这方

c++ - 如何构建一个元组 vector 并像对一样对它们进行排序?

假设,我有几个像这样的整数元素:(391),(152),(283),(144),(165),(156)现在我想对元素进行排序,例如对vector进行排序。唯一不同的是,这里我们有3个键,而不是2个键。排序后的元素将如下所示:(144),(152),(156),(165),(283),(391)是否有任何STL或其他技术可以实现此目的?我发现了元组,但在理解它时遇到了一些问题。你们能以任何方式帮助我吗?可能是通过提供有用的链接或解释过程。 最佳答案 Avector的tuple如果需要,可以只使用STL进行排序。#include#inc

c++ - 我可以将新的 std::tuple 放入内存映射区域,然后再读回吗?

我有一些打包的结构,我将把它们写入内存映射文件。它们都是POD。为了适应我正在做的一些通用编程,我希望能够编写一个std::tuple几个打包结构。我担心写一个std::tuple的成员到我映射区域的地址,然后将该地址转换回std::tuple会坏掉的。我写了一个小示例程序,它似乎可以工作,但我担心我有未定义的行为。这是我的结构:structFoo{charc;uint8_tpad[3];inti;doubled;}__attribute__((packed));structBar{inti;charc;uint8_tpad[3];doubled;}__attribute__((pac

c++ - 元组头中对函数 std::get<1> 的引用

如何获取对特定元组实例的“get”函数的引用?下面给出了我最好的尝试,但没有针对g++4.5.1进行编译#include#includetypedefstd::tupleTuple;autot=(std::string&(Tuple&))(std::get);编译错误是:a.cc:5:error:invalidcasttofunctiontype‘std::string&(Tuple&)’a.cc:5:error:unabletodeduce‘auto’from‘’我想使用函数引用作为某些STL算法的输入。实际上,我有点惊讶这对我来说似乎是多么不平凡。 最佳

c++ - mpl::transform on boost::fusion::tuple

以下代码无法在g++(GCC)4.6.020110603(预发布版)和-std=c++0x和Boost1.46上编译。1。我错过了一个包含或者这实际上是一个错误吗?如果是后者,如何解决?#include#include#include#include#include#include#include#includenamespacempl=boost::mpl;templatestructMeta{Tt;typedefmpl::vector,std::function,std::function>MplVector;typedefTFusionSequence;//workstypede