我在 c++11 中有以下类:
#include <iostream>
#include <string>
#include <utility>
void overloaded_function(const std::string& param) {
someStuffHere
}
void overloaded_function(std::string&& param) {
someStuffHere
}
如您所见,overloaded_function 的实现完全相同。我想创建一个新函数,而不是将相同的实现分为两种不同的方法。我试过:
void overloaded_function(const std::string& param) {
uniqueCall(std::forward<std::string&>(param));
}
void overloaded_function(std::string&& param) {
uniqueCall(std::forward<std::string&&>(param));
}
void uniqueCall(T&& param) {
someStuffHere
}
但由于 uniqueCall 不接受左值引用,它不起作用。
最佳答案
如果不需要修改参数,则根本不需要右值重载1。 const 左值引用将愉快地绑定(bind)到右值。
这就是 C++ 一直以来的工作方式,右值引用不会改变这一点。
很简单
void overloaded_function(const std::string& param) {
//someStuffHere
}
将绑定(bind)到任何值类别的参数。
<子> 1 - 如果您确实需要修改它,那么传递右值有点可疑。
关于转发到唯一方法的 C++11 重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49727626/