如何将标准::string_view转换为双倍?
How to convert std::string_view to double?
我正在为应用程序的自定义选项文件编写一个 c++ 解析器。我有一个循环,可以从文本文件中读取option=value
形式的行,value
必须将其转换为double
。在伪代码中,它执行以下操作:
while(not EOF)
statement <- read_from_file
useful_statement <- remove whitespaces, comments, etc from statement
equal_position <- find '=' in useful_statement
option_str <- useful_statement[0:equal_position)
value_str <- useful_statement[equal_position:end)
find_option(option_str) <- double(value_str)
为了处理字符串拆分和传递给函数,我使用std::string_view
因为它避免了过度复制并清楚地说明了查看预先存在的std::string
段的意图。我已经完成了所有工作,以至于std::string_view value_str
指向包含我要提取的值的useful_statement
的确切部分,但我无法弄清楚从std::string_view
读取double
的方法。
我知道std::stod
不适用于std::string_view
.它允许我写
double value = std::stod(std::string(value_str));
然而,这很丑陋,因为它转换为实际上不需要的字符串,即使它在我的情况下可能不会产生明显的差异,但如果必须从文本文件中读取大量数字,它可能太慢了。
另一方面,atof
不起作用,因为我无法保证空终止符。我可以通过在构造它时向useful_statement
添加