我将 C++17 与 Visual C++ 2017 一起使用,并且正在使用 std::forward_as_tuple
创建引用的 std::tuple
。
从 C++14 开始,可以使用类类型而不是索引来访问元组的元素。
当我尝试下面的代码时出现编译错误
error C2338: duplicate type T in get<T>(tuple)
你知道如何访问以这种方式创建的元组中的元素吗?
示例代码下方
struct CA {
int data_ = 0;
};
struct CB {
int data_ = 0;
};
int main()
{
CA a;
CA b;
auto joined_objects = std::forward_as_tuple(a, b);
std::cout << std::get<0>(joined_objects).data_ << std::endl; // works
std::cout << std::get<CA &>(joined_objects).data_ << std::endl; // fails
}
最佳答案
这是因为编译器不知道你真正想要的是哪个元素。
存在歧义,因为 a
和 b
具有相同的类型。如果元组两次包含相同的类型,则类型的 get
帮助程序将无法工作。这很好理解。
您是不是想写 CB b
? This works.
关于c++ - 我无法按类型访问使用 forward_as_tuple 创建的元组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52218180/