gpt4 book ai didi

c++ - std::tuple get(tuple) 中的重复类型 T - 编译时断言失败

转载 作者:可可西里 更新时间:2023-11-01 09:47:04 26 4
gpt4 key购买 nike

我将可变参数存储到 std::tuple 中的对象构造函数到目前为止一切顺利。但是当使用存储的参数和 std::get<>() 调用对象函数时,我将被抛出一个我根本不理解的编译时断言失败。 只有当所有参数都不是不同类型时才会发生这种情况

编译器错误信息是:

msvc\14.16.27023\include\tuple(934): error C2338: duplicate type T in get(tuple)

如下所示:

#include <tuple>
#include <iostream>

using namespace std;

template<class... Args>
struct store_in_tuple {

tuple<Args...> m_tuple_args;

store_in_tuple(Args... args) : m_tuple_args{ args... } {}

void func() {
func_tuple(std::get<Args>(m_tuple_args)...);
}

void func_tuple(Args... args) {}
};

int main(int argc, char** argv) {

store_in_tuple<int, float, double, int> sit1(1, 2.0f, 3.0, 4);
sit1.func(); // <- not ok

store_in_tuple<int, float, double, size_t> sit2(1, 2.0f, 3.0, 4);
sit2.func(); // <- ok

return 0;
}

为什么会发生这种情况,是否有解决方法?

最佳答案

例子可以简化为:

auto t = std::make_tuple(1, 's', 2);
std::get<int>(t);

在这里,我们有一个 t类型 std::tuple<int, char, int> . std::get也可以使用类型(与索引一起),除非您有重复的类型。 std::get<char>将工作,因为只有一个 chart ,但是std::get<int>不会工作,因为它不知道哪个 int获取 - 12

这是这里发生的事情:

void func() {
func_tuple(std::get<Args>(m_tuple_args)...);
}

std::get<Args> , 扩展后,如果 Args... 将不起作用包含至少一个重复类型,因为它根本不知道要获取哪个

关于c++ - std::tuple get<T>(tuple) 中的重复类型 T - 编译时断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56979172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com