我无法在使用forward_as_tuple创建的元组中按类型访问元素

Abr*_*ile 1 c++ perfect-forwarding stdtuple c++17

我正在使用C++ 17和Visual C++ 2017,我正在创建一个std::tuple引用std::forward_as_tuple.

从C++ 14开始,可以通过使用类类型而不是索引来访问元组的元素.

当我尝试下面的代码时,我有编译错误

 error C2338: duplicate type T in get<T>(tuple)
Run Code Online (Sandbox Code Playgroud)

你知道如何访问以这种方式创建的元组中的元素吗?

下面是示例代码

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
 }
Run Code Online (Sandbox Code Playgroud)

luk*_*k32 5

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

有歧义,因为ab具有相同的类型.get如果元组包含两次相同的类型,则类型的帮助程序无法工作.这很容易理解.

你或许打算写CB b吗?这有效.