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

标签 c++ c++17 perfect-forwarding stdtuple

我将 C++17 与 Visual C++ 2017 一起使用,并且正在使用 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
 }

最佳答案

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

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

您是不是想写 CB bThis works.

关于c++ - 我无法按类型访问使用 forward_as_tuple 创建的元组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52218180/

相关文章:

c++ - 混合 monotuch 和 Obj-C 或 C++

c++ - NSTask 的碳当量?

c++ - 函数的模板推导如何在 C++ 中工作?

c++ - 具有 move 操作和右值转发的对象生命周期

c++ - 完美转发复制的 std::tuple

c++ - 如何声明接受转发引用并返回引用或拷贝的函数模板

c++ - cmake 更新缓存变量

c++ - 积分模板参数。错误 : use of 'this' in a constant expression

c++ - 我应该避免在现代 C++ 中引用指针还是在这种特殊情况下可以

c++ - 自定义迭代器: how to correctly handle distance calculation and equality comparison between a and b if the behavior of those differe