use*_*020 3 c++ templates move-semantics c++11
例如
template<typename T> void f(T&& t) {}
template<typename T> void f(T const& t) {}
Run Code Online (Sandbox Code Playgroud)
我打电话的时候
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
Run Code Online (Sandbox Code Playgroud)
这是一种方式:
#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) {}
Run Code Online (Sandbox Code Playgroud)
标签调度的另一种可能性是:
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>{} );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |