【发布时间】:2017-10-05 21:25:47
【问题描述】:
我可以从存储在 std::string、std::vector 或 std::array 中的字符中解析数字。 但是当字符在 std::unique_ptr 中保存的缓冲区中时,我无法这样做。 我可以将缓冲区复制到一个字符串中以增强精神,但我想避免这种复制
这是我的尝试:
#include<memory>
#include<array>
#include<iostream>
#include "boost/spirit/include/qi.hpp"
int main()
{
const int max_size = 40;
std::array<wchar_t, max_size> numeric1;
std::wstring src = L"5178120.3663";
std::wcsncpy(numeric1.data(), src.data(), max_size);
double num = 0.0;
boost::spirit::qi::parse(numeric1.begin(), numeric1.end(), num);
std::cout.precision(15);
std::cout << num << std::endl; // OK
std::unique_ptr<wchar_t[]> numeric2(new wchar_t[max_size]);
std::wcsncpy(numeric2.get(), src.data(), max_size);
std::wcout << L"ok = " << std::wstring(numeric2.get()) << std::endl; // OK
boost::spirit::qi::parse(numeric2.data(), max_size, num); // fails to compile
std::cout.precision(15);
std::cout << num << std::endl;
// 'boost::spirit::qi::parse': no matching overloaded function found
return 0;
}
修复:
boost::spirit::qi::parse(numeric2.get(), numeric2.get() + wcslen(numeric2.get()), num);
查看 Zalman 的回答
【问题讨论】:
标签: c++ c++11 boost-spirit