我无法按类型访问使用 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
 }

这是因为编译器不知道你真正想要的是哪个元素。

存在歧义,因为 ab 具有相同的类型。 get 如果元组包含相同类型两次,则类型助手将无法工作。很好理解。

您可能是想写 CB bThis works.