链接式"运算符>>"相对于可变参数模板函数的优势?

Advantage of chained `operator >>` over Variadic Template Function?

本文关键字:gt 函数 运算符 相对于 链接 变参 参数      更新时间:2023-10-16

考虑以下C++代码:

A a = ...;
B b = ...;
C c = ...;
cin >> a >> b >> c;
...
cout << a << b << c;

现在我们有了C++11可变模板函数(我认为),它可以通过以下方式之一实现:

cin.read(a,b,c);
cout.write(a,b,c);
read(cin,a,b,c);
write(cout,a,b,c);
cin(a,b,c);
cout(a,b,c);

链式<<运算符与这些方法相比有什么优点吗?换句话说,你认为如果他们一开始有可变模板函数,他们还会使用operator <<operator >>吗?如果是,为什么?

iostreams最重要的一个方面是它是可扩展的。您可以添加新的类型,所需要做的就是提供一个用于写入的重载<<和用于读取的>>

你需要为你的变体版本提供一个类似的机制。

您必须提供一些全局或命名空间范围的函数名,istream::readostream::write通过依赖于参数的查找来调用这些函数名。这个函数的名称需要定义明确。但在cin.read(a,b,c);中根本找不到该函数的名称。除非是read,否则在这种情况下,您会遇到许多潜在的名称冲突问题。

这种机制比CCD_ 10过载更不明显。您需要查找文档来了解要为其编写重载的函数的名称,而operator<<就在语句中:cout << ...