c – 如何编写接受\u0026\u0026和const&both的模板
发布时间:2020-12-16 10:10:27 所属栏目:百科 来源:网络整理
导读:例如 templatetypename T void f(T t) {}templatetypename T void f(T const t) {} 我打电话的时候 int i;f(i); // call f(T) which I expect to call f(T const),how to solve it?f(10); // call f(T),that is fine 解决方法 这是一种方式: #include type_
例如
template<typename T> void f(T&& t) {} template<typename T> void f(T const& t) {} 我打电话的时候 int i; f(i); // call f(T&&) which I expect to call f(T const&),how to solve it? f(10); // call f(T&&),that is fine 解决方法
这是一种方式:
#include <type_traits> template<typename T> typename std::enable_if< !std::is_lvalue_reference<T>::value >::type f(T&& t) {} template<typename T> void f(T const& t) {} 标签调度的另一种可能性是: template<typename T> void f_(const T&,std::true_type) { std::cout << "const T&n"; } template<typename T> void f_(T&&,std::false_type) { std::cout << "T&&n"; } template<typename T> void f(T&& t) { f_(std::forward<T>(t),std::is_lvalue_reference<T>{} ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |