如果我理解正确,完美转发使用通用引用来推断传递的参数是左值还是右值。很好。
这意味着,要实现这个功能,我必须制作模板功能。一个可能的例子是
template <class T>
void func(T&& str){
auto s = std::forward<T>(str);
cout << s << endl;
}
T
但是,如果我知道func
应该std::string
只是呢?我认为一种可能的选择是使用std::enable_if
andstd::is_same
来限制 type T
。但它变得越来越冗长。
这种情况的最佳做法是什么?
编辑:
正如 Kerrek SB 所建议的那样,我正在尝试制作一个可能的场景。
我正在做一个有std::vector<double>
成员的课程。然后,我想做一个构造函数,它也需要std::vector<double>
. 如果参数是左值,我想将它复制到一个成员,但如果不是,我想移动它。
这是某种可能的例子吗?