使用容器转发引用

时间:2017-07-03 22:56:36

标签: c++ c++11 c++14 rvalue lvalue

有可能通过转发引用来提供std::vector<T>。 我知道

template<typename T>
void f(const std::vector<T>&&){} // is rvalue
template<typename T>
void f(const std::vector<T>&){} // is lvalue

但我如何为左值和右值(使用std :: vector作为参数)制作函数?

1 个答案:

答案 0 :(得分:1)

我想你想要

// traits for detecting std::vector
template <typename> struct is_std_vector : std::false_type {};
template <typename T, typename A>
struct is_std_vector<std::vector<T, A>> : std::true_type {};

template<typename T>
std::enable_if_t<is_std_vector<std::decay_t<T>>::value>
f(T&&); // Take any std::vector