0

ファイルとファイルのようなエンティティを 1 行ずつベクトルに読み込むテンプレート関数を実装しています。

#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, ... への呼び出しに一致しません。

エラー メッセージをさらに提供する必要がある場合はお知らせください。単純なことを台無しにしている可能性があります。しかし、私はその理由を理解できません.チュートリアルを使用してこれを取得しました.これはかなり良い解決策だと思いました.

4

1 に答える 1

4

どうやらtype にis_i変換するつもりだったようですが、代わりに type の変数を宣言しました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");
于 2012-10-23T19:40:32.977 に答える