首页 > 解决方案 > 如何在模板方法中使用 std::forward,当只有一个元素时,例如 std::array, 被传递给另一个模板方法

问题描述

假设我们有以下简化的场景,其中模板化方法调用模板化方法,如下所示:

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。他们是一种转发方式吗?

标签: c++templatesforwarding-reference

解决方案


假设您没有尝试对异常做任何事情,您可以转发参数并调用operator[]转发的参数。将选择正确的成员函数重载。

auto temp = fa( std::forward<Tb>( tb )[n][m] );

推荐阅读