Я не могу получить доступ к элементу по типу в кортеже, созданном с forward_as_tuple - PullRequest
0 голосов
/ 07 сентября 2018

Я использую 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
 }

1 Ответ

0 голосов
/ 07 сентября 2018

Это потому, что компилятор не знает, какой элемент вам действительно нужен.

Существует двусмысленность, потому что a и b имеют одинаковый тип. get Помощник для типов не может работать, если кортеж содержит один и тот же тип дважды. Это довольно понятно.

Возможно, вы хотели написать CB b? Это работает.

...