c++ - 如何在模板方法中使用 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
。他们是一种转发方式吗?
解决方案
假设您没有尝试对异常做任何事情,您可以转发参数并调用operator[]
转发的参数。将选择正确的成员函数重载。
auto temp = fa( std::forward<Tb>( tb )[n][m] );
推荐阅读
- c++ - 高完整性 C++ 规则 7.2.1 的基本原理是什么
- mongodb - 在 Mongo 聚合查询中使用索引对文档进行排序
- c# - 移除其他对象上的 MeshRenderer
- javascript - 如何让赛普拉斯在点击之间不等待
- mysql - 使用 mysql 工作台创建数据库
- javascript - 使用最新版本的 node.js 的 Eclipse 2019-09 的任务视图中未显示 TODO 任务
- java - Spring:如何从属性文件中访问属性,以便在spring中使用实体中的属性
- excel - 隔离部分字符串并删除包含它的任何单元格
- jsrender - JsViews:同时动态更新/刷新多个“选择”上的数据 - 使用依赖=
- apache - 如何让 apache 让我用 Location 标头定义“200 OK”响应的主体?