使用模板化函数从CSV文件中读取数字

时间:2017-08-08 18:50:01

标签: c++ templates

我想知道是否有一种优雅的方法来编写单个函数,使用模板化函数将数字列表(int或double)读入向量中?

这是我通常做的事情:

template<class VecType>
vector<VecType> read_vector(const string& file){
    vector<VecType> vec;

    ifstream indata;
    indata.open(file);

    string line;    

    while (getline(indata, line)) {
        stringstream lineStream(line);
        string cell;
        while (std::getline(lineStream, cell, ',')) {
            vec.push_back(stod(cell));
        }        
    }

    indata.close();

    return vec;
}

我的问题在于stoistod部分。如何妥善处理这个?

我通常使用stod,如果doubleint,则转换会自动从VecType发送到int。但是应该有更好的方法来做到这一点,对吗?

1 个答案:

答案 0 :(得分:3)

您可以拥有专门的模板:

template <class T> T from_string(const std::string&);

template <> int from_string<int>(const std::string& s) { return stoi(s); }
template <> double from_string<double>(const std::string& s)  { return stod(s); }

并使用vec.push_back(from_string<VecType>(cell));