转发到唯一方法的 C++11 重载方法

标签 c++ c++11

我在 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/

相关文章:

c++ - 长 std::initializer_list 包含许多用于测试的元素

c++ - 传递一个包含数字的数组作为参数 c++

c++ - 静态链接 GLFW 时未定义对 `__ms_vsnprintf' 的引用

c++ - 如何在 vtk 中可视化二维 double 组?

c++ - 初始化 vector 的 vector 的类构造函数

c++11 - C++ CRTP : How to make only one (some) function of the base class as a friend to to the derived class?

c++11 - C++ 14 主函数的形式

C++后缀评估问题

c++ - 无作用域枚举是否仍然有用?

c++ - C 编译的 .so 可以与 C++ 应用程序一起使用吗?