草庐IT

func_returning_a_tuple

全部标签

c++ - 使用 std::tuple 作为 std::unordered_map 的键

使用下面的代码,我在MSVC中遇到了一个非常令人困惑的错误,它似乎暗示key类型(std::tuple)正在转换为std::string。#include#include#include#include#includetypedefstd::tuplekey_t;structkey_hash:publicstd::unary_function{std::size_toperator()(constkey_t&k)const{returnstd::get(k)[0]^std::get(k)^std::get(k);}};structkey_equal:publicstd::binary_

C++ 函数模板 : Derived and explicit return type

我有以下问题,我只是没有找到合适的解决方案(也许没有):我有一个模板化方法,其中返回类型取决于输入类型,感谢C++11decltype返回类型可以很容易地导出,但是如果需要,我还希望允许用户明确定义返回类型。更正式地说,我有一个模板化函数f,我想被调用为f(x),既没有显式定义输入类型,也没有显式定义返回类型。我也希望能够将其称为fx()明确定义返回类型,但输入类型仍然自动派生。现在,用C++11满足第一个约束很容易(假设还有另一个模板化方法:templateautof(constInT&in)->decltype(/*codederivingthereturntypeusingin*

c++ - 压缩 `std::tuple` 和可变参数

我有以下类(class):templateclassC{public:std::tuple...>maps;//Notrealfunction:voidfoo(Tkeys...keys){maps[keys]=1;}};我将如何实现foo以便它分配给maps中的每个std::map并使用它匹配的键调用?例如,如果我有Cc;我打电话c.foo(1,2,3.3,"qwerty")那么c.maps应该等同于m1=std::map()m1[1]=1;m2=std::map()m2[2]=1;m3=std::map()m3[3.3]=1;m4=std::map()m4["qwerty"]=1;c

c++ - std::tuple_cat 但只有独特的元素

我需要一个与std::tuple_cat非常相似的constexpr函数,但不是将所有元素(无论它们是什么)合并到一个元组中,仅当尚未添加该类型时,我才需要它来添加给定元素。将谓词传递给std::tuple_cat会很好,但不存在这样的API(这让我很伤心)。我已经看到了几种使用类型特征查找合并类型的方法,但我还没有完全理解这些方法,但没有以constexpr函数的形式出现。我不确定如何将它们放在一起,尽管我确信它可以完成。像这样:std::tupleFirst;std::tupleSecond;std::tupleThird;std::tupleResult=tuple_cat_un

c++ - 结构到/从 std::tuple 转换

假设我有具有相同类型布局的struct和std::tuple:structMyStruct{inti;boolb;doubled;}usingMyTuple=std::tuple;有没有标准化的方法可以将一个转换为另一个?附言我知道简单的内存复制可以解决问题,但它依赖于对齐和实现 最佳答案 我们可以使用结构化绑定(bind)将结构转换为元组,只需做一些工作。结构到元组非常尴尬。templatestructto_tuple_t;templatestructto_tuple_t{templateautooperator()(S&&s)c

c++ - 为什么不能用兼容类型的 std::tuple 按元素构造 std::tuple?

我无法初始化std::tuple来自std::tuple的逐元素元素兼容类型。为什么它不像boost::tuple那样工作?#include#includetemplatestructFoo{//error:cannotconvert'std::tuple'to'int'ininitializationtemplateFoo(U&&u):val(std::forward(u)){}Tval;};intmain(){boost::tuple>{boost::tuple{}};//okautoa=boost::tuple{};boost::tuple>{a};//okstd::tuple>

c++ - 学习 C++ : returning references AND getting around slicing

我很难理解引用文献。考虑以下代码:classAnimal{public:virtualvoidmakeSound(){coutmakeSound();Animal&r1=rFunc();r1.makeSound();Animalr2=rFunc();r2.makeSound();Animalv=vFunc();v.makeSound();}结果是:“barkbarkrawrrawr”。以Java的思维方式(这显然破坏了我对C++的概念化),结果将是“barkbarkbarkbark”。我从我的previousquestion了解到这种差异是由于切片造成的,我现在对切片是什么有了很好的理

c++ - 如何将 std::array 转换为 std::tuple?

这个问题在这里已经有了答案:Howtoconstructatuplefromanarray(1个回答)关闭3年前。我正在开发一个辅助模块来在多态对象之间传递值,在某些时候我有std::array需要转发std::tuple我可以通过使用index_sequence或/和递归来想出一些解决方案,但所有这些看起来都很笨重且难以阅读。有没有更直接的方法通过标准库来做到这一点?另外,以防万一-我说的对吗std::array的布局是一组密集的相应对象,因此等于,可以说,void**各自的长度,而元组的布局允许间隙?

c++ - 继承 : Function that returns self type?

假设我有两个类:classA{public:A*Hello(){returnthis;}}classB:publicclassA{public:B*World(){returnthis;}}假设我有一个B类的实例,如下所示:Btest;如果我调用test.World()->Hello()就可以了。但是test.Hello()->World()将无法工作,因为Hello()返回A类型。如何让Hello()返回B的类型?我不想使用virtual函数,因为我们有20多个不同的类继承A。 最佳答案 您可以使用CRTP,奇怪的重复模板模式:t

c++ - 在运行时按索引访问 std::tuple 元素的最佳方式

我有函数at设计用于通过运行时指定的索引访问std::tuple元素templateinlinetypenamestd::enable_if::value,void>::typefor_each(_Tuple&,_Function){}templateinlinetypenamestd::enable_if::value,void>::typefor_each(_Tuple&t,_Functionf){f(std::get(t));for_each(t,f);}namespacedetail{namespaceat{templatestructhelper{inlinehelper(s