使用右值引用重载

时间:2011-08-16 14:55:24

标签: c++11 rvalue-reference

完美的转发是伟大的。但是,如果我想完全向前而只是重载,那么我该怎么办?对于一些恰好是模板化类型的东西?

template<typename T> void foo(T&& ref);
template<typename T> void foo(const T& ref); 

无效,因为第一次重载将调用完美转发。我真的很喜欢行为非常相似,如果第一个是正常的左值参考 - 其中T将始终是一个值类型。

1 个答案:

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