gpt4 book ai didi

c++ - 如何编写同时接受 && 和 const& 的模板函数?

转载 作者:太空狗 更新时间:2023-10-29 19:48:23 25 4
gpt4 key购买 nike

例如

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

另一种可能性是标签分派(dispatch):

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

关于c++ - 如何编写同时接受 && 和 const& 的模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com