问题标签 [stdtuple]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
2468 浏览

c++ - 你如何构建你的比较函数?

我经常遇到这种情况,尤其是在 C++ 中进行排序时,我正在比较一系列字段以比较更大的结构。一个简化的例子:

我本能的方法似乎很麻烦,尤其是对于 3 个以上的领域。您将如何在 C++ 中构建这一系列比较?其他语言是否提供更简洁或更优雅的语法?

0 投票
20 回答
102412 浏览

c++ - 如何迭代 std::tuple 的元素?

如何迭代元组(使用 C++11)?我尝试了以下方法:

但这不起作用:

错误 1:抱歉,未实现:无法将 'Listener ...' 扩展为固定长度的参数列表。
错误 2:i 不能出现在常量表达式中。

那么,我如何正确地迭代元组的元素呢?

0 投票
2 回答
1156 浏览

c++ - C++0x 元组向后存储元素

经过一番调查,我发现 C++0x 将元素向后存储在内存中的元组中。

例如,使用以下代码:

使用 GCC 4.5.2 编译时,我得到以下输出:

这最初让我感到困惑。为什么数据是向后存储的?在搜索了 GNU 无意中混淆的标头之后,我注意到实现类似于以下内容:

因为基类包含最后一个元素,然后下一个派生类包含倒数第二个等,模板参数的实际顺序是相反的。

当我第一次接触元组时,我认为我可以将它们用于类似的函数glInterleavedArrays(),它将顶点数据数组设置为颜色、纹理坐标、法线和点的元组。当然,如果我创建一个元组数组,则必须反向输入这些数据,如果您碰巧忘记按正确的顺序放置参数,这可能会导致非常奇怪的错误。

那么这样的事情呢?

在 GCC 4.5.2 下:

错误:参数包参数“head ...”必须位于模板参数列表的末尾

除非将来可以使用它,否则我几乎无法找到另一种实现此功能的方法。还有其他方法吗?有什么方法可以诱使 GCC 在内存方面获得正确排序的元组?

0 投票
6 回答
65471 浏览

c++ - 只有两个成员的 std::pair 和 std::tuple 之间的区别?

只有两个成员的anstd::pair和an有区别吗?std::tuple(除了std::pair需要两个而且只有两个成员并且tuple可能或多或少的明显......)

0 投票
3 回答
3309 浏览

c++ - 为什么对 std::tuple 实现使用递归继承不好?

这个问题上,Howard Hinnant 说

std::tuple 的一些实现使用递归继承。但好人没有。;-)

有人可以解释一下吗?

0 投票
3 回答
2772 浏览

c++ - 混淆了 ISO C++ 标准中 std::tuple 的默认构造函数描述

该标准说std::tuple具有以下成员功能

有人可以解释一下应该发生std::tuple<>什么吗?

0 投票
2 回答
998 浏览

c++ - 如何从实现者元组构造一个包装元组?

我有一些实现类(impls)和一些用 C++ 实现的用户包装器。我想将 impls 和 wrappers 保存在两个不同的元组中,以便我可以通过单个分配来初始化我的 impls。(我也有其他原因:)。

问题是 Visual Studio 2012 标准库的元组类不允许我在没有 const 引用的包装器复制构造函数的情况下构造我的包装器元组。可悲的是,在这种情况下我需要 const_cast ,例如:

上面的代码按预期编译和运行,但是如果我删除/注释掉包装类 A 的 const-ref-ctor,我的 VS2012 编译器和我的 gcc4.7.2 编译器都不会编译代码。(1)我做错了什么?

由于我没有关于 c++11 的良好文档,我猜想元组的可变参数复制 ctor 只需要其他元组的 const ref。如果是这样,(2)为什么元组类没有这样的ctor?我的意思是背后的主要原因。

总而言之,我想将所有 impls 和包装器放在一个元组中,这样我就可以使用单个操作(即 make_shared)进行分配。元组是必须的,因为我已经编写了一些帮助程序,以便我可以在编译时按类型查找(例如Get<A<int>>(w))(3)是否有一种简洁的方法来保存对 impl 的引用,这样我就不需要分别分配每个 impl .

0 投票
2 回答
435 浏览

c++ - 是否允许 std::tuple 的实现因触发空类元素的派生到基转换而失败?

这段代码不能用 GCC4.7 编译

因为GCC派生自A利用空基类优化。然而,这导致 GCC 挑剔f(A)和抱怨

错误:'A'是一个不可访问的基础'tuple<A>'

这个错误是由 C++ 标准授予的还是仅仅是 libstdc++ 的一个错误?

0 投票
2 回答
740 浏览

c++ - 使用元组和 boost.fusion,有什么理由使用结构吗?

元组类似于结构(这里讨论:Boost::Tuples vs Structs for return values)。似乎唯一的优点是编写 struct 更方便,因为它更短且通过键而不是数字。

还可以使用 fusion map 和 structs 通过键Boost::Tuples vs Structs 访问返回值来模拟结构。这是一个多一点的写作。

似乎也没有性能损失。好吧,融合可能会更快,因为它使用视图。

所以使用结构的唯一原因是如果您不想再编写几行代码并保持代码可读性?

0 投票
1 回答
390 浏览

c++ - 作为回调传递一个静态方法的地址,其签名来自元组解包

我需要将 Lambda 作为回调传递(特别是对于 WinAPI)。思路如下:

  1. 将 lambda 存储在一个单例类中(每个 Lambda,也有两个相同的,具有不同的类型),所以它应该是安全的

    LambdaSingleton<Lambda_Type>::instance = l;

  2. 将调用 lambda 实例的静态方法的地址作为回调传递。

    /li>

我已经有一个工作类,用于在编译时提取有关函数的信息:

所以我会得到这样的东西:

由于我只需要让编译器生成一个回调类专业化(而不是实际调用它的方法),我如何应用本网站其他问题中提出的迭代解包技术?

谢谢