小编seh*_*ehe的帖子

Spirit V2和X3的状态

Spirit X3如此“无状态”的目的是什么?

Spirit V2中“状态”的不良方面

回顾Spirit V2,“语法”在许多方面在概念上都是有状态的。这是因为语法是类实例。

基本上,使语法(甚至任何一条规则)变得有状态有很多不良方面:

  • 它可能会使您的语法不可重入;
  • 它可能会给您的语法实例增加线程安全性;
  • 自我管理的“标志”是一场灾难。

从理论上讲,添加外部状态会使您的语法变得不平凡。

真的不需要状态吗?

相反,您可以说任何解析器都是有状态的(因为它解析当前上下文并且上下文是状态)。下面是程序员添加其他“上下文”的一个好例子:

quoted_string_ = as_string [omit [char_("'\"") [_a = _1]] >> *(char_ - lit(_a)) >> lit(_a)]
Run Code Online (Sandbox Code Playgroud)

qi::locals是非外部国家的好兆头。

程序员可以在语法中添加一些“外部状态”,并且在大多数情况下,它们只是在做错误的事情:

func_call_ = func_name_ >> lit('(') >> eps [ref(is_inside_function_call) = true] >> ...
Run Code Online (Sandbox Code Playgroud)

但是,在某些极端情况下,外部状态很有用。

macro_type_1_ =
    lit("{{{") [PUSH_STATE(macro_ctx, Macro::Type1)] >> (
        ((any_expr_ - end_of_macro_ctx_) >> lit("}}}") >> eps [POP_STATE(macro_ctx)]) |
        (eps [POP_STATE(macro_ctx)] >> eps [_pass = false])
    )
;
macro_type_2_ =
    lit("[[[") [PUSH_STATE(macro_ctx, Macro::Type2)] >> (
        ((any_expr_ - end_of_macro_ctx_) >> …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-spirit boost-spirit-qi boost-spirit-x3

0
推荐指数
1
解决办法
477
查看次数

boost::geometry 中无效几何图形的数据集

是否存在使用 c++ 和 boost::geometry 库的所有可能无效几何图形的数据集?或者至少是我可以转换为 boost::geometry 的无效几何图形的多边形坐标示例:自交等我想使用至少所有可能的无效几何图形来测试我的应用程序。像这样的东西:

https://knowledge.safe.com/articles/21674/invalid-ogc-geometry-examples.html

但有更多带有内部和外部多边形的测试用例。

c++ geometry boost boost-geometry

0
推荐指数
1
解决办法
694
查看次数

解除引用这会导致分段错误

我有以下功能

LinearScheme::LinearScheme() {
    cout << " empty constructor" << endl;
}


void LinearScheme::init(
    int tableId,
    std::string &basePath,
    std::vector<size_t> &colElemSizes,
    TupleDescMap &tupleDescMap,
    size_t defaultMaxFragmentSize,
    int numCols,
    BoundBases &bounds,
    std::vector<int> &colsPartitioned ) 
{
    // This linear scheme ignores bounds
    // it could be improved to use colsPartitioned for ordering (TODO)
    cout << "init Linear Scheme " << endl;

    *this = LinearScheme(); //SEGFAULTS HERE

    cout << "after cons here?" << endl;
    // init private fields    
    this->tableId_ = tableId;
    this->basePath_ = basePath;
    this->colElemSizes_ = …
Run Code Online (Sandbox Code Playgroud)

c++ constructor factory-method segmentation-fault

-1
推荐指数
1
解决办法
381
查看次数

Qt - 从正在运行的进程中获取输出

我想在 Qt 中从 Linux 上的运行进程中获取输出。

我的代码如下所示:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qprocess.h>
#include <qthread.h>

QProcess process;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    process.start("htop");

    connect(&process, SIGNAL(readyReadStandardOutput()), this, SLOT(getData()));
}

void getData(){

    QByteArray out;
    out = process.readAllStandardOutput();
}

MainWindow::~MainWindow()
{
    delete ui;
}
Run Code Online (Sandbox Code Playgroud)

但是我想从htop获取实时(更改)输出并将其保存到字符串。

c++ qt screen-capture terminal-emulator

-1
推荐指数
1
解决办法
702
查看次数

For Loop无法正常工作(c ++)

我一直试图让这个程序正常工作.它确实编译,但它没有提示用户输入,而是说明了一些不正确的内容.

提示:

询问用户10个课程标记(从0到100)以及之后的状态(在标签中)有多少通过标记.

我的代码:

#include <iostream>
#include <time.h>
#include <stdlib.h>

using namespace std;

int main()
{
    int mark;
    int passinggrades = 0;
    for(int i = 0; i > 10; i++)
    {
        cout << "Enter Mark:";
        cin >> mark;
        while(mark >= 50)
        {
            passinggrades++;
        }
    }
    cout << j << " of your marks were passing grades.";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ loops for-loop

-2
推荐指数
1
解决办法
2597
查看次数