链式`运算符>>`优于Variadic模板函数?

时间:2012-08-05 22:38:04

标签: c++ c++11

考虑以下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 >>吗?如果是这样,为什么?

1 个答案:

答案 0 :(得分:5)

iostream最重要的一个方面是它是可扩展的。您可以添加新类型,您需要做的就是为写入提供重载<<,并为阅读提供>>

您需要为可变参数版本提供类似的机制。

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

这种机制不如重载operator<<那么明显。您需要查找文档以了解编写重载的函数的名称是什么,而operator<<就在语句中:cout << ...