在“Essential C ++”一书中(更具体地说,第2.7部分),作者通过以下示例简要讨论了模板函数的用法,该示例显示了一条诊断消息,然后遍历了一个向量的元素
template <typename T>
void display_message(const string& msg, const vector<T>& vec)
{
cout << msg;
for (int i = 0; i < vec.size(); ++i)
cout << vec[i] << ' ';
}
所以,这个例子让我感兴趣,因为我(可能像许多其他爱好者开发者)一直认为在大多数应用程序中,标准输入/输出流被用于通信和数据处理。然后作者提到这种实现display_message的方式更灵活。你能举个例子说明这种灵活性“闪耀”吗?可以这么说吗?换句话说,是否存在可选的第三个参数采用另一个输入/输出表示(例如,嵌入式设备)的情况,或者它只是一个简单的添加,应该与简单的结构一起使用,而不是极端的我试图描述的情况?
编辑:正如 @Matteo Italia 注意到的,这是函数声明
void display_message(const string&, const vector<T>&, ostream& = cout);
答案 0 :(得分:0)
你混淆了两个&#34;灵活性&#34;可以在此功能中使用。
模板部分(我认为是作者正在谈论的部分)允许您传递任何std::vector<T>
,因为T
可以输出溪流;即你可以传递整数,双精度甚至自定义对象的向量,函数将很乐意在给定的流上输出它; 1
stream 部分(引起你的注意)是允许你为输出部分指定任何(窄)输出流;它很有用,因为您可能希望在其他一些流上输出您的消息(以及您的向量);例如,如果它是一条错误消息,您将需要cerr
;最重要的是,如果您要写入文件,您将传递文件流。
备注的
std::ostream_iterator
,它允许你使用std::copy
将数据从容器迭代器复制到输出流);