我(打算)使用此答案中的代码从 CSV 读取内容。本质上,我得到了一个迭代器,用于连续,
字符之间的字符串;但我不想将它们放在字符串向量中,而是想将这些字符串解析为(任意)类型 T 的元素,它来自模板参数。所以...
template <typename T>
void foo(const std::string& line)
{
// ....
std::vector<T> vec;
using namespace boost;
tokenizer<escaped_list_separator<char> > tk(
line, escaped_list_separator<char>('\\', ',', '\"'));
for (tokenizer<escaped_list_separator<char> >::iterator i(tk.begin());
i!=tk.end();++i)
{
/* magic goes here */
}
我可以使用 istringstream`(例如这里建议的):
std::istringstream iss(*i);
T t; iss >> t;
vec.push_back(t);
但这太过分了(我可能在这里建造了两次甚至三次)。如果 C++ 有一个std::from_string()
类似的std::to_string
,那么我会做
vec.emplace_back(std::from_string(*i));
但这不存在。也许boost::lexical_cast
?我真的宁愿使用一些标准的东西。
我应该怎么做?