- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在尝试将完美转发与我递归解压的参数包一起使用,这让我意识到我并不真正理解在存在通用引用的情况下管理如何选择给定函数的重载的规则.
我的困惑是由一些类似于以下的代码引起的:
#include <iostream>
template<class T>
void write(const T& data)
{
std::cout << "Called write(const T& data)" << std::endl;
}
template<class T, class ...U>
void write(T&& obj, U&&... objs)
{
std::cout << "Called write(T&& obj, U&&... objs)" << std::endl;
}
int main(int, char**)
{
int j = 0;
write(j);
return 0;
}
运行时,选择了 void write(T&& obj, U&&... objs)
重载,但是如果我更改了 void write(const T& data)
的签名> 到 void write(const T data)
、void write(T& data)
或 void write(T data)
然后调用该函数.
为什么未选择void write(const T& data)
重载但void write(const T data)
, void write(T& data)
, 或者 void write(T data)
是?
编辑:我最初认为这个问题可能与 std::forward
的使用有关;然而,它似乎更多是通用引用的结果。我的原始示例如下:
#include <iostream>
void write()
{
std::cout << "Writing nothing" << std::endl;
}
void write(const char* data)
{
std::cout << "Writing const char*: " << data << std::endl;
}
template<class T>
void write(const T& data)
{
std::cout << "Writing generic: " << data << std::endl;
}
template<class T, class ...U>
void write(T&& obj, U&&... objs)
{
write(std::forward<T>(obj));
write(std::forward<U>(objs)... );
}
int main(int, char**)
{
int j = 0;
write("a", j);
return 0;
}
最佳答案
这个问题的答案可能有点复杂。我会尽量简单一些。
看来,在引用折叠之后,重载决议的候选者是 write(const T&)
和 write(T&)
,两者都具有 T = int
而第二个有 U... = (none)
。这样,后一个被选中并再次调用转发函数。
关于c++ - 使用参数包和通用引用进行过载选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52397309/
在我看来,CakePHP 中的对象过载过多。我在我的布局中输出调试:debug($this); 并且我发现了 6 个 HTML 帮助对象实例: [Html] => HtmlHelper Object
Product **products; int numProducts = 0; void setup() { ifstream finput("products.txt"); //g
为什么返回 5,我很好奇这个普通函数比默认参数 one 有更高的优先级。有人可以向我解释一下吗?提前致谢 static void Main(string[] args) { Conso
我现在遇到 mysql 过载的问题,然后当它非常繁忙时,服务器将完全停止响应。我知道我的一个数据库有大量流量,但我该如何处理这个问题。我是否需要一台更好的服务器,或者我是否需要一个不同的数据库引擎。目
由于插入查询的过载,我最近开始遇到一些严重的服务器问题。我们服务器上的所有查询一直以来都得到了优化,但是由于大量的 INSERT 查询,流量再次回升并且 CPU 已达到极限。 我们为访问我们网站的每位
我收到这些错误: circleType.cpp||In function 'std::ostream& operator<<(std::ostream&, circleType&)':| circle
好的,我一直是 inspired to do some head punching .似乎重载 operator& 会导致不小的痛苦。 存在哪些合理的重载情况? (不能说我曾经这样做过......)
RabbitMQ 集群不接受新连接! 连接的套接字数量很少,Rabbitmq 日志中的唯一消息是: ** WARNING ** Mnesia is overloaded 这意味着什么?我该如何解决?
我们可以使用 lombok 来生成 setter,如下所示: @Data //or @Setter public class Test { int a;
我正在尝试将大约 1 GB 大小的文件下载到具有 1 GB RAM 内存的服务器,因此如果我尝试将其下载到变量中(下面的代码),操作系统会因 RAM 过载而终止进程. require LWP::Use
这个简单的程序无法编译。 [使用 XE5 和 D10 进行测试。] program Project10; {$APPTYPE CONSOLE} {$R *.res} uses System.Cla
我得到了这台服务器带有 8GB DDR3 RAM 的 Intel Xeon 四核 E3-1230v2 我发现这台服务器的 CPU 正在耗尽。看起来严重重载。观察“每日进程日志”后,我意识到下面的进程占
问题: 我遇到的问题是我的应用程序运行缓慢,因为我在一个文件 (index.html) 中运行了太多页面(page1.html、page2.html 和 page3.html),重点是让用户决定他/她
我试图以这种方式重载 std::find 函数: include include include "Marker.h" namespace Test { class MarkerConta
我有一个动画和 JS,用于交替 2 个 div 并更改它们的背景图像(来自几十个图像的数组),有点可互换的 div。一切正常,但是当动画运行时我可以看到我的 CPU 处于 100%。起初我认为这可能是
我刚刚重新安装了 Vim,这次我在我的 VIM 配置中添加了一些新插件。问题是,现在,当我对文件进行第一次更改时,VIM 会阻塞并且我的一个 CPU 达到 100% 负载。当我编辑文件时,这种情况也会
我是一名新编码员,正在学习 Marionette 来制作 session 预订应用程序。我已经打听了好几个小时,并且已经敲了我的头好几个小时了。 基本上,问题是这样的,当我添加 session 时,会
我正在尝试在 CloudSim Plus 模拟器中进行水平自动缩放。我需要通过多个虚拟机来扩展应用程序。我正在尝试修改示例 LoadBalancerByHorizontalVmScalingExamp
有没有一种方法可以强制 C# 编译器忽略缺少的对象运算符重载,而是在运行时处理该检查?我问是因为我有一个包含多个对象的容器,这些对象具有类型为 int、string、ushort 等的各种属性。我正在
好的,我有这个查询,它为我提供了 DISTINCT product_series,以及表中的所有其他字段: SELECT pi.* FROM ( SELECT DISTINC
我是一名优秀的程序员,十分优秀!