我想知道是否有一种优雅的方法来编写单个函数,使用模板化函数将数字列表(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;
}
我的问题在于stoi
或stod
部分。如何妥善处理这个?
我通常使用stod
,如果double
为int
,则转换会自动从VecType
发送到int
。但是应该有更好的方法来做到这一点,对吗?
答案 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));