我正在开发一个简单的CSV解析器,它可以将文件中的行存储在元组中。如果文件内每行的条目数量和类型都是固定的,那这将是一个简单的任务。但实际上,文件内每行的条目数量和类型都是不确定的。因此,文件内的行可能会像这样:
1,2.2,hello,18,world
解析器应该能够像这样工作:
ifstream file("input.csv");
SimpleCSVParser<int, float, string, int, string> parser(file);
当我尝试实现解析实际行的函数时,事情变得复杂起来。我仍然没有找到一种从参数列表中提取下一个类型以在调用file >> var
之前声明变量的方法。我还需要在循环中执行此操作,以某种方式从每次迭代的结果构建元组。
那么如何使用纯C++11将字符串解析为元组呢? 我尝试了这个:
template <typename ...Targs>
tuple<Targs...> SimpleCSVParser<Targs...>::iterator::operator*() {
istringstream in(cur);
in.imbue(locale(locale(), new commasep)); // for comma separation
tuple<Targs...> t;
for (size_t i = 0; i < sizeof...(Targs); ++i) {
tuple_element<i,decltype(t)>::type first;
in >> first;
auto newt = make_tuple(first);
// what do I do here?
}
}
但是由于我用于提取类型的元组为空,所以它不起作用。
tuple_element<i,decltype(t)>
需要一个constexpr
的i
,而不是一个运行时变量。 - Walter