我想用精神x3将各种数字解析成一个字符串。我试着这样做,但它不起作用。
typedef x3::rule<class int_parser_id, std::string> int_parser_type;
const int_parser_type int_parser = "int_parser";
auto const int_parser_def = x3::int32;
我可以做什么来将使用x3 :: int32解析器的Int解析为字符串?
答案 0 :(得分:1)
解析是扫描字符串以生成具体类型或类型集合的对象;你所要求的是与之相反的,精神称之为“一代”。 Spirit.X3仅执行解析,因此您直接问题的答案是:您不能。
然而,Spirit确实附带了一个单独的组件:Spirit.Karma。
#include <ctime>
#include <iostream>
#include <Eigen/Dense>
int main(int argc, char* argv[])
{
const Eigen::ArrayXd xs(Eigen::ArrayXd::Random(1000000));
Eigen::ArrayXd array_result(Eigen::ArrayXd::Zero(xs.size())), loop_result(Eigen::ArrayXd::Zero(xs.size()));
{
std::clock_t start_time = std::clock();
for (int i = 1; i <= 100; ++i) {
const double b = i; // Values not important;
array_result += exp(b * xs);
}
std::clock_t end_time = std::clock();
std::cout << "Array time (seconds): " << static_cast<double>(end_time - start_time) / CLOCKS_PER_SEC << std::endl;
}
{
std::clock_t start_time = std::clock();
for (int i = 1; i <= 100; ++i) {
const double b = i; // Values not important;
for (Eigen::ArrayXd::Index i = 0; i < xs.size(); ++i) {
loop_result[i] += exp(b * xs[i]);
}
}
std::clock_t end_time = std::clock();
std::cout << "Loop time (seconds): " << static_cast<double>(end_time - start_time) / CLOCKS_PER_SEC << std::endl;
}
system("pause");
return 0;
}
必须注意的是,Karma是一个C ++ 03代码库,因此编译时间比X3长得多 - 强烈建议使用预编译头文件!