我将C ++ 17与Visual C ++ 2017一起使用,并使用std::tuple
创建引用的std::forward_as_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
}
答案 0 :(得分:5)
这是因为编译器不知道您真正想要哪个元素。
存在歧义,因为a
和b
具有相同的类型。如果元组两次包含相同类型,则get
类型的辅助程序将无法使用。这是可以理解的。
您可能是想写CB b
吗? This works.