使用ifstream的模板函数有什么问题

What is wrong with my template function using ifstream?

本文关键字:什么 问题 函数 ifstream 使用      更新时间:2023-10-16

我正在实现模板函数,以逐行读取文件和类似文件的实体:

#include <iostream>
#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <fstream>
using namespace std;
template<typename T> vector<T> readfile(T ref1)
{
    std::vector<T> vec;
    std::istream_iterator<T> is_i;
    std::ifstream file(ref1);
    std::copy(is_i(file), is_i(), std::back_inserter(vec));
    return vec;
}

我希望使用以下代码读取文件:

int main()
{
    std::string t{"example.txt"};
    std::vector<std::string> a = readfile(t);
    return 0;
}

我有错误: "无匹配到'(std :: istream_iterator,char,...

让我知道我是否需要提供更多错误消息。我很可能只是弄乱了一些简单的东西。但是我不明白为什么 - 使用教程,我已经得到了这个,我认为这是一个很好的解决方案。

您显然是将is_i变成一种类型,而是声明了类型std_istream_iterator<T>的变量。您可能打算写:

typedef std::istream_iterator<T> is_i;

您可能还应该将模板参数与文件名的类型解),因为模板是相当限制的:

template <typename T>
std::vector<T> readfile(std::string const& name) {
    ...
}
std::vector<int> values = readfile<int>("int-values");