加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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>{} );
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读