我正在使用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
}
这是因为编译器不知道你真正想要的是哪个元素。
有歧义,因为a
和b
有相同的类型。如果元组包含两次相同的类型,则get
类型的帮助程序无法工作。这很容易理解。
你或许打算写CB b
吗? This works.