小编jto*_*lds的帖子

使用Git的多个工作目录?

我不确定这是否是Git所支持的东西,但理论上它似乎应该对我有用.

我的工作流程通常涉及我同时在多个分支中编辑文件.换句话说,我经常想在一个分支中打开一些文件,而我在另一个分支中编辑另一个文件的内容.

我的典型解决方案是进行两次检查,但遗憾的是我不能在它们之间共享分支和引用.我想要的是只有两个工作目录由同一个.git文件夹管理.

我知道本地git clone解决方案(默认情况下,硬链接共享对象,以及--shared选项,它使用原始repo设置备用对象存储),但这些解决方案只减少了磁盘空间使用量,特别是在--shared的情况下,似乎充满了危险.

有没有办法使用一个.git文件夹,并有两个工作目录由它支持?或者是Git硬编码只是随时检查一个工作目录?

git

233
推荐指数
3
解决办法
8万
查看次数

Boost.Spirit.Qi:获取规则的属性并将其设置为封闭规则的struct属性的字段?

就像其他许多问题一样,我正在尝试使用Boost.Spirit.Qi将简单语法解析为结构树.

我会尝试提炼我想要做的最简单的案例.我有:

struct Integer {
  int value;
};
BOOST_FUSION_ADAPT_STRUCT(Integer, (int, value))
Run Code Online (Sandbox Code Playgroud)

后来,在语法结构中,我有以下成员变量:

qi::rule<Iterator, Integer> integer;
Run Code Online (Sandbox Code Playgroud)

这是我定义的

integer = qi::int_;
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试实际解析整数时,使用

qi::phrase_parse(iter, end, g, space, myInteger);
Run Code Online (Sandbox Code Playgroud)

myInteger.value在成功解析后始终未初始化.同样,我尝试了以下定义(显然那些不编译的定义是错误的):

integer = qi::int_[qi::_val = qi::_1]; //compiles, uninitialized value
integer = qi::int_[qi::_r1 = qi::_1]; //doesn't compile
integer = qi::int_[phoenix::bind(&Integer::value, qi::_val) = qi::_1]; //doesn't
integer = qi::int_[phoenix::at_c<0>(qi::_val) = qi::_1]; //doesn't
Run Code Online (Sandbox Code Playgroud)

显然,我误解了一些关于精神,凤凰或其他东西的东西.我的理解是,当方括号中的部分作为函数对象执行时,这里qi::_1的第一个属性qi::int_应该表示已解析的整数.我假设函数对象将采用封闭integer属性qi::_val并尝试将解析后的整数分配给它.我的猜测是因为我的BOOST_FUSION_ADAPT_STRUCT调用,两者兼容,从静态分析的角度来看,情况似乎确实如此,但数据并未得到保留.

是否有参考(&)指定我在某处或某处遗漏?

c++ boost-spirit boost-phoenix boost-spirit-qi

7
推荐指数
1
解决办法
3534
查看次数

提升精神Qi重新建立跳过自定义跳过语法

到目前为止,我的语法一直使用标准boost::spirit::ascii::space/ boost::spirit::ascii::space_type队长.

我有一些使用船长的规则和一些不使用船长的规则

qi::rule<Iterator, PTR<Expression>(), ascii::space_type> expression;
qi::rule<Iterator, PTR<Term>()> term;
Run Code Online (Sandbox Code Playgroud)

当我在跳过非终结符(例如term)中使用非跳过非终结符(例如expression)时,一切都像我期望的那样工作 - 空格只对term非终结内部很重要.

此外,到目前为止,我一直很好,包括使用不使用qi::skip重新跳过的非终端内的队长的非终结者,例如

index = (qi::lit('[') >> qi::skip(ascii::space)[explist >> qi::lit(']')]);
Run Code Online (Sandbox Code Playgroud)

这样,在[]括号内部的空白并不重要,但在外面.

但是,现在我想添加我自己的自定义队列(我想让换行有意义,然后添加评论跳过).我的船长语法看起来像:

struct skip_grammar : qi::grammar<Iterator> {
  qi::rule<Iterator> start;
  skip_grammar() : skip_grammar::base_type(start) {
    start = qi::char_("\t\r ");
  }
};
Run Code Online (Sandbox Code Playgroud)

我已经能够将它添加到我的规则定义中就好了

qi::rule<Iterator, PTR<Expression>(), skip_grammar> expression;
Run Code Online (Sandbox Code Playgroud)

但我似乎无法弄清楚如何使用我的跳过语法作为参数qi::skip(和替换ascii::space).我尝试使用类型,本地实例变量和全局实例变量.我得到的最远的就是抱怨我的skip_grammar需要一个拷贝构造函数.所以我尝试将一个复制构造函数添加到我的跳过语法中,但显然boost::noncopyable基类是有原因的,因为我的二进制文件几乎立即就被发现了.

我应该如何使用它?

谢谢

c++ boost-spirit boost-spirit-qi

7
推荐指数
1
解决办法
1884
查看次数

标签 统计

boost-spirit ×2

boost-spirit-qi ×2

c++ ×2

boost-phoenix ×1

git ×1