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

问题描述 投票:1回答:1

我正在使用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
 }
c++ c++17 perfect-forwarding stdtuple
1个回答
5
投票

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

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

你或许打算写CB b吗? This works.

© www.soinside.com 2019 - 2024. All rights reserved.