c++ - 输出向量在模板函数中
问题描述
这部分代码给出了一个错误:
template <class T>
void print_vector(vector<T>& v, string sep)
{
std::ostream_iterator<T> ostr_it(std::cout, sep) ;
std::copy(begin(v), end(v), ostr_it);
}
main.cpp:17:30:错误:没有匹配的构造函数用于初始化 'std::ostream_iterator<float>' std::ostream_iterator<T> ostr_it(std::cout, sep);
我很困惑,因为如果我在模板函数之外执行此操作并直接输出向量,则不会出现错误:
vector<float> result(elements);
std::copy(begin(result), end(result), ostream_iterator<float>(cout, ", "));
怎么了?我需要专门化每个模板功能吗?
解决方案
由于没有发布答案,我想我会继续。
接受的签名ostream_iterator
是 C 字符串,而不是 C++ 字符串:
std::ostream_iterator(ostream_type& stream, const CharT* delim)
已选择隐式转换为char *
fromstd::string
是不可取的,如此处所述,因此您会收到错误消息。
要使其工作,您可以简单地转换std::string
自己:
std::ostream_iterator<T> ostr_it(std::cout, sep); // DOES NOT WORK
std::ostream_iterator<T> ostr_it(std::cout, sep.c_str()); // WORKS
推荐阅读
- javascript - tesseractjs 在一系列相同类型的图像上行为不端
- php - 是否有用于验证 URL 的 Magento 2 PHP 类
- arrays - 图像数组迅速
- java - FirestoreRecyclerView 刷卡视图删除文档
- java - 调用 dynamicRealm.beginTransaction() 后应用程序冻结
- mysql - 3 分钟后数据反映在 InnoDB 表中
- python - How to wrap a c++ class to python so that I can access its members' public methods (the member is an object pointer) using pybind11
- typescript - 打字稿:如何在类型参数中定义一组可能的键?
- javascript - ajax async: false 选项如何在幕后工作?
- node.js - Nodejs文件上传