c – 完美转发对象的成员
发布时间:2020-12-16 05:22:29 所属栏目:百科 来源:网络整理
导读:假设我有两个结构体: struct X {};struct Y { X x; } 我有功能: void f(X);void f(X); 如何编写一个函数g(),使用Y或Y但完美转发X或X到f(): template typename Tvoid g(T t) { if (is_lvalue_referenceT::value) { f(t.x); } else { f(move(t.x)); }} 上面
假设我有两个结构体:
struct X {}; struct Y { X x; } 我有功能: void f(X&); void f(X&&); 如何编写一个函数g(),使用Y&或Y&&但完美转发X&或X&&到f(): template <typename T> void g(T&& t) { if (is_lvalue_reference<T>::value) { f(t.x); } else { f(move(t.x)); } } 上面的代码说明了我的意图,但是随着参数数量的增长,它的扩展性不是很大.有没有办法让它的完美转发工作,使其可扩展? 解决方法template <typename T> void g(T&& t) { f(std::forward<T>(t).x); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |