完美的转发是伟大的。但是,如果我想不完全向前而只是重载,那么我该怎么办?对于一些恰好是模板化类型的东西?
template<typename T> void foo(T&& ref);
template<typename T> void foo(const T& ref);
无效,因为第一次重载将调用完美转发。我真的很喜欢行为非常相似,如果第一个是正常的左值参考 - 其中T将始终是一个值类型。
答案 0 :(得分:3)
#include <type_traits>
template<typename T>
typename std::enable_if
<
!std::is_reference<T>::value,
void
>::type
foo(T&& ref) {}
template<typename T> void foo(const T& ref) {}