我无法按类型访问使用 forward_as_tuple 创建的元组中的元素
I cannot access element by type in tuple created with forward_as_tuple
我正在使用 C++17 和 Visual C++ 2017,我正在使用 std::forward_as_tuple
创建 std::tuple
个引用。
从 C++14 开始,可以使用 class 类型而不是索引来访问元组的元素。
当我尝试下面的代码时出现编译错误
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++17 和 Visual C++ 2017,我正在使用 std::forward_as_tuple
创建 std::tuple
个引用。
从 C++14 开始,可以使用 class 类型而不是索引来访问元组的元素。
当我尝试下面的代码时出现编译错误
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.