【问题标题】:I cannot access element by type in tuple created with forward_as_tuple我无法在使用 forward_as_tuple 创建的元组中按类型访问元素
【发布时间】:2018-09-07 08:12:14
【问题描述】:

我在 Visual C++ 2017 中使用 C++17,我正在使用 std::forward_as_tuple 创建引用的 std::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】:

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

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

    你是不是想写CB bThis works.

    【讨论】:

    • FWIW、godbolt 和 gcc 很有帮助,因为我可以复制粘贴代码、添加标头并查看 ... is an ambiguous base class of 'std::tuple&lt;CA&amp;, CA&amp;&gt;' 这很快就放弃了。
    猜你喜欢
    • 2016-11-13
    • 2022-06-19
    • 2020-08-02
    • 1970-01-01
    • 2018-07-13
    • 2016-08-08
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    相关资源
    最近更新 更多