1

完璧な転送は素晴らしいです。しかし、テンプレート化されたタイプである何かに対して、完全に転送せ、代わりに単にオーバーロードしたい場合はどうすればよいですか?

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

最初のオーバーロードは完全な転送を呼び出すため、機能しません。最初の値が通常の左辺値参照である場合と非常によく似た動作が本当に必要です。ここで、Tは常に値型になります。

4

1 に答える 1

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) {}
于 2011-08-16T15:35:59.510 に答える