问题标签 [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 投票
1 回答
898 浏览

c++ - 删除元组成员的复制构造函数导致错误

这段代码

工作正常,但如果你删除Foo复制构造函数,它会失败并出现以下编译错误:使用已删除函数Foo::Foo(const Foo&)

但是,既然我明确地告诉对象可以移动,为什么std::tuple构造函数使用Foo复制构造函数而不是它的移动构造函数?如何强制std::tuple构造移动Foo实例而不是复制它?

0 投票
2 回答
122 浏览

c++ - 在构造过程中使用 std::tuple 成员引用?

我希望这个例子能说明我的问题。我想std::tuple在整个构建之前引用一个较早构建的成员std::tuple。有一个优雅的解决方案吗?我知道使用hackery是可能void *的,但我宁愿在走上那条黑暗孤独的道路之前寻求一些帮助。

理念一

我尝试过创建一个get_ref函数,但我遇到了同样的问题,即我无法访问尚未创建的对象的成员函数。不过,这是我的尝试之一。

演示

想法 2

然后我想也许我可以做一些类似于std::functionwith的事情std::place_holders,所以一个静态对象包含一个指向每个元素所在位置的指针/引用std::tuple。我认为这值得一试,但我不知道如何在实践中实现它......

0 投票
0 回答
642 浏览

c++ - 如何在编译时检查 std::tuple 中的重复类型?

我想要以下帮手:

其中值是:

  • 有重复项时为真。
  • 没有重复项时为false 。

我不知道如何递归迭代元组来执行检查。我不知道存在解决这个问题的策略。

有人可以解释一下如何创建这个助手吗?

0 投票
1 回答
118 浏览

c++ - 如何使用模板类内部的模板类作为带有模板参数的模板模板参数?

我正在尝试将模板类用作模板模板参数和另一个模板参数。听起来,它非常复杂/扭曲,我无法弄清楚如何修复编译器错误。

我写的就像“std::find_if”,但它适用于“std::tuple”。正如下面的代码所示,当我为 is_same_type_tt 指定类型时,它似乎正在工作,但是当我尝试将模板参数与 is_same_type_tt 一起使用时,编译器会抱怨:

源代码是这样的:

作为测试,下面的代码编译得很好:

但是当我尝试将它与另一个模板参数一起使用时,它不起作用:

为了让它工作,我不得不重构模板类,这样我就可以这样做:

解决方法似乎还不错,但我仍然想知道我做错了什么。如果这不是一种可能的方法,我想知道什么 C++ 标准阻止它。

谢谢阅读。

0 投票
3 回答
96 浏览

c++ - 从函数返回三个值

嗨,我想实现元组。让我知道这出了什么问题以及如何正确实施它。我想从一个函数返回三个值,其中第一个值是整数,最后一个值是数组。

帮我解决这个问题。

我得到Symbol 'tuple' could not be resolved at const tuple & p 因为 p.third 也是一个错误

0 投票
0 回答
153 浏览

c++ - 向 `std::vector 添加值>` 使用隐式完美转发

我有一个std::vectorof std::tuples,它存储整数类型以及一个没有复制构造函数的类。我的目标是向这个向量添加值,而不MyClass在内存中制作任何不必要的副本。因为,MyClass将在我的实际应用程序中存储大量数据。

我尝试的是:

Visual Studio 2015 在标准库文件“xmemory0”中的某处给出以下错误。

'std::tuple::tuple(std::tuple &&)':无法将参数 1 从 'const wchar_t [7]' 转换为 'std::_Tuple_alloc_t'
xmemory0 657

这样做的正确方法是什么?

0 投票
4 回答
12669 浏览

c++ - `std::make_tuple` 的原因是什么?

我的意思是为什么std::make_tuple存在?我知道在某些情况下,该函数会减少您必须输入的字符数量,因为您可以避免使用模板参数。但这是唯一的原因吗?std::tuple该函数存在而其他类模板没有这样的功能有什么特别之处?仅仅是因为std::tuple在这种情况下您可能会更频繁地使用吗?


以下是std::make_tuple减少字符数量的两个示例:

但是就像上面写的那样,对于许多其他类模板,您没有这样的功能。

0 投票
1 回答
2271 浏览

c++ - 为什么标准允许由左值引用元组分配右值引用元组?

似乎std::tuple包含一个或多个引用在构造和分配(尤其是复制/移动构造和复制/移动分配)方面具有意外行为。它不同于std::reference_wrapper(更改引用的对象)和具有成员引用变量的结构(删除了赋值运算符)的行为。它允许方便的std::tiepython 像多个返回值,但它也允许明显不正确的代码,如下所示(链接在这里)

该标准似乎要求或强烈暗示20.4.2.2.9最新工作草案的复制(ish)分配部分中的这种行为(Ti&将折叠为左值参考):

template <class... UTypes> tuple& operator=(const tuple<UTypes...>& u);

9要求: sizeof...(Types) == sizeof...(UTypes)并且is_assignable<Ti&, const Ui&>::value适用于所有i.

10效果:将 u 的每个元素分配给 *this 的对应元素。

11返回: *this

尽管 move(ish) 构造部分20.4.2.1.20不太清楚(is_constructible<int&, int&&>返回false):

template <class... UTypes> EXPLICIT constexpr tuple(tuple<UTypes...>&& u);

18要求: sizeof...(Types) == sizeof...(UTypes) .

19效果:对于 all ,构造函数用 withi初始化第ith 个元素*thisstd::forward<Ui>(get<i>(u))

20备注:此构造函数不应参与重载决议,除非is_constructible<Ti, Ui&&>::value对 all 为真i。构造函数是explicit当且仅当is_convertible<Ui&&, Ti>::value对于至少一个为假i

这些不是唯一受影响的小节。

问题是,为什么需要这种行为?另外,如果标准的其他部分在起作用,或者我误解了它,请解释我哪里出错了。

谢谢!

0 投票
2 回答
109 浏览

c++ - 在辅助方法中包装 std::get<>

我有这样的课:

有没有办法定义我可以这样使用的功能模板?

或者,如果不可能,像这样?

在我天真的方法中,我想出了一个错误的代码:

T当我使用它隐式实例化模板时,编译器实际上无法推断出类型。

0 投票
2 回答
292 浏览

templates - 通过 std::is_same 理解类型推导

我想要std::tuple一个特定大小的函数,并提供一个函数,该函数接受与元组一样多的参数并且具有相同的确切类型。

我想我可以使用可变参数模板函数从参数包中构造一个元组并将这两个元组与std::is_same

下面是一些示例代码来进一步解释我的尝试

这是我在 Visual Studio 2013(vc120) 下得到的

在 GCC 5.2.0 下

为什么前两个 is_samefalse和最后一个true