Как использовать std :: forward в методе шаблона, когда только один элемент, например, std :: array , передается другому методу шаблона - PullRequest
0 голосов
/ 05 апреля 2020

Допустим, у нас есть следующий упрощенный сценарий, где шаблонный метод вызывает шаблонный метод следующим образом:

template<typename Ta>
inline auto fa(Ta&& ta){  
myclassA ra;
// doing things to "ra" based on "ta"...
return ra
}

template<typename Tb>
inline auto fb(Tb&& tb){  
myclassB rb;
// doing things to "rb" based on "tb"...
// at some point:
auto temp = fa(tb[n][m]) //should this not be std::forward? how do you do that? 
// doing things to "rb" based on "temp"...
return rb;
}

С универсальными ссылками я знаю, что я должен std::forward. Если бы мне нужно было передать tb в целом, я бы сделал auto temp = fa(std::forward<Tb>(tb)). ОДНАКО Мне неясно, как пройти tb[n][m], так как я передаю только одну запись (из записи) из tb. Это их способ переадресации?

1 Ответ

1 голос
/ 05 апреля 2020

Если вы не пытаетесь сделать что-то необычное, вы можете просто переслать параметр и вызвать operator[] для перенаправленного параметра. Будут выбраны правильные перегрузки функции-члена.

auto temp = fa( std::forward<Tb>( tb )[n][m] );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...