c++ - 如何完善转发成员变量
问题描述
考虑以下代码:
template<typename T> void foo(T&& some_struct)
{
bar(std::forward</* what to put here? */>(some_struct.member));
}
在转发整个结构的情况下,我会这样做std::forward<T>(some_struct)
。但是在转发成员时如何获得正确的类型?
我的一个想法是使用decltype(some_struct.member)
,但这似乎总是产生该成员的基本类型(如结构定义中所定义)。
解决方案
会员访问在这里做正确的事:您只需要std::forward<T>(some_struct).member
.
经测试:
template <class... >
struct check;
struct Foo {
int i;
};
template <class T>
void bar(T &&f) {
// fatal error: implicit instantiation of undefined template 'check<int &&>'
check<decltype((std::forward<T>(f).i))>{};
}
int main() {
bar(Foo{42});
}
推荐阅读
- python - 使用 Pandas 提取 excel 文档信息并将选定的列保存到新文件
- android - RadioButton 在带有浅色主题的 Android 10/11 上不可见
- c# - C# DTO 中特定数据类之间的更改
- python - Django:SSL + 斜杠导致浏览器中的 URL 显示异常路径
- ios - 是否有一种纯粹的 SwiftUI 方式来调用 registerForRemoteNotifications()?
- python - 在 Docker 中运行的 Python 包导致 ERR_EMPTY_RESPONSE
- css - 为什么在 css 文件中设置 @font-face 时不显示 open-iconic 图标?
- algorithm - 给定一组长方体,我如何将它们合并成最小数量的长方体来表示相同的整体形状/体积?
- kubernetes - 为什么在 kubernetes 中不允许服务帐户可以创建 Pod?
- javascript - 在三元语句中使用 Javascript 和 HTML 会导致 React 出错