31得票2回答
在不同的`I`值情况下,使用`std::tuple`上的`std::get<I>`是否保证线程安全?

假设我有std::tuple&lt;T0, T1, T2&gt; my_tuple{x0, x1, x2}; T0、T1和T2是值类型 (即不可能有别名)。 如果每个线程访问不同的元素,那么使用std::get从多个线程并发地访问并改变my_tuple的元素是否安全? 示例:templat...

31得票2回答
为什么在C++中,std::tuple会破坏小尺寸结构体的调用约定优化?

C++有一个小型结构体调用约定优化,编译器以与传递原始类型(例如,通过寄存器)相同的效率传递函数参数中的小型结构体。例如: class MyInt { int n; public: MyInt(int x) : n(x){} }; void foo(int); void foo(MyInt)...

29得票5回答
如何减少目前必需的序列化模版代码。

我们的软件正在抽象化硬件,我们有代表这些硬件状态的类,并拥有所有外部硬件属性的许多数据成员。我们需要定期更新其他组件的状态,为此我们通过MQTT和其他消息传递协议发送protobuf编码的消息。有不同的消息描述硬件的不同方面,因此我们需要发送这些类的不同数据视图。下面是一个草图:struct ...

27得票2回答
C++11中返回元组的最佳方法是什么?

我想从一个函数中返回一些值,并将它们打包在元组中。因此,我有两种函数声明的可能性:std::tuple&lt;bool, string, int&gt; f() { ... return std::make_tuple(false, "home", 0); } 和std::tuple&...

27得票5回答
从std::tuple中删除第一个元素类型

这似乎是一个非常简单的问题:如何从std::tuple中删除第一个(第n个)类型? 示例:typedef std::tuple&lt;int, short, double&gt; tuple1; typedef std::tuple&lt;short, double&gt; tuple2;...

26得票3回答
元组的统一初始化

今天,我遇到了一个问题,我有一个元组向量,其中元组可能包含多个条目。现在,我想将我的元组向量转换为对象向量,使得元组的条目与对象的统一初始化完全匹配。 下面的代码可以完成任务,但它有点笨拙。我在想是否可能推导出通用解决方案,如果元组恰好与对象的统一初始化顺序相匹配,则可以构造对象。 当要传...

25得票2回答
如何从元组中获取第N个类型?

我想制作一个模板,可以让我输入索引并给出该索引处的类型。我知道可以使用 decltype(std::get&lt;N&gt;(tup)) 来实现这一点,但我希望自己来实现它。例如,我想要做到这样:typename get&lt;N, std::tuple&lt;int, bool, std::...

24得票3回答
为什么std::tuple实现中不适合使用递归继承?

在这个问题中,Howard Hinnant说: 一些std::tuple的实现使用了递归继承。但好的实现不会这么做。;-) 请问有人能解释一下吗?

24得票2回答
如何获取std::tuple中元素的引用?

你可以使用std::get&lt;n&gt;(tuple)来获取std::tuple的第n个元素的值。但是我需要将该元组中的一个元素作为引用传递给函数。 我该如何获取std::tuple中一个元素的引用?

22得票4回答
使用结构化绑定替代std::tie的滥用

在阅读此c++17最终功能摘要时,我对结构化绑定(重点是我的)部分感到有些惊讶: 结构化绑定 到目前为止,有一个已知的技巧可以滥用std::tie将元组或对等体直接赋给不同的变量,而无需手动处理结果类型。 这是一种hack,并且变量也必须存在,现在您可以在一行中声明变量并将其初始化: aut...