11得票1回答
从std::tuple派生时出现困惑,无法处理std::get问题

我的基本想法是从std::tuple派生出自己的类,以获取一些内部的辅助类型,就像这样: template <typename ... T> class TypeContainer: public std::tuple<T...> { public: ...

11得票6回答
从元组中获取构造函数参数

假设我有一个模板,其由类类型和若干个参数类型参数化。一组与这些类型匹配的参数存储在元组中。如何将它们传递给类类型的构造函数? 在几乎所有的C++11代码中: template<typename T, typename... Args> struct foo { tuple&...

11得票1回答
结构体的通用比较运算符

在我的许多单元测试中,我需要比较仅具有数据成员的简单结构体的内容:struct Object { int start; int stop; std::string message; } 现在,如果我想写这样的内容:CHECK(object1==object2); 我总是需要实现:b...

11得票2回答
为什么使用std::tuple时不能保证复制省略?

我预期在C++20中,以下代码在打印A和B之间不会输出任何内容(因为我预期有保证的RVO会发生)。但实际输出为: A Bye B C Bye Bye 因此可以推断出一个临时对象被创建了。#include <iostream> #include <tuple> str...

11得票2回答
用具有两个或更多参数的类初始化std::tuple

#include <iostream> class NoCopyMove { public: NoCopyMove(int a) : a_(a), b_(a) {} NoCopyMove(int a, int b) : a_(a), b_(b) {} N...

10得票1回答
如何使用C++模板高效地推出一个序列

我有一个依赖于模板参数的复杂类型C,我需要在一个长度受限制的序列中使用它。有一个constexpr函数next()可用于从C_n -> C_n+1。由于每个序列元素都有不同的类型,我使用std::tuple来存储结果。mkTuple()函数负责(有限的)序列展开。 这是我所做的简化示例(使用...

9得票3回答
如何比较元组的等效类型,无视类型顺序?

我正在寻找一种方法来比较两个元组,以查看它们是否包含相同的类型。不需要考虑类型的顺序,只要两个元组之间存在一对一映射关系,我将认为它们是相等的。 这是一个我设置的小测试,我正在尝试实现equivalent_types(): #include <iostream> #includ...

9得票1回答
Structured binding 违规

代码如下: #include <tuple> int main() { auto [a] = std::make_tuple(1); return [a]() -> int { return a; }(); } 在clang 12中会产生错误: ...

9得票1回答
为什么你不能从元组中分配一对,但元组可以从一对中分配?

我不清楚为什么将tuple<X,Y>=pair<X,Y>赋值是合法的。 但将pair<X,Y>=tuple<X,Y>赋值是非法的。 std::pair<int, double> x { 1 , 5.5}; std:...

9得票3回答
给一个std模板函数起别名

我需要给std::get函数起一个别名,以便在我的代码中提高可读性。 不幸的是,我得到了一个编译时错误:get<0> in namespace ‘std’ does not name a type。 using等价于typedef,因此它需要与类型一起使用。 我正在使用一个st...