小编MvG*_*MvG的帖子

隐式转换为模板

我在下面的示例表明,从非模板类型到模板类型的隐式转换将无法像仅涉及非模板类型的那些无缝转换.有没有办法使它们工作?

例:

struct point;

template<unsigned d> struct vec {
  vec() { }
  // ...
};

template<> struct vec<2> {
  vec() { }
  vec(const point& p) { /* ... */ } // Conversion constructor
  // ...
};

struct point {
  operator vec<2>() { return vec<2>(/* ... */); } // Conversion operator
};

template<unsigned d> vec<d> foo(vec<d> a, vec<d> b) {
  return vec<d>(/* ... */);
}

template<unsigned d1, unsigned d2>
vec<d1 + d2> bar(vec<d1> a, vec<d2> b) {
  return vec<d1 + d2>(/* …
Run Code Online (Sandbox Code Playgroud)

c++ casting overloading implicit-conversion

5
推荐指数
1
解决办法
239
查看次数

测试语法的歧义

我正在为正式语言编写语法。理想情况下,我希望该语法是明确的,但这可能是不可能的。无论哪种情况,我都想在开发语法时了解所有可能的歧义。我怎样才能做到这一点?

到目前为止,当我开发一门语言时,大部分时间我都会求助于 Bison,为它编写一个 LR(1) 语法,以详细模式运行 Bison 并查看所有的 shift-reduce 和 reduce-reduce 冲突它告诉我。确保我在每种情况下都同意它的选择。

但是现在我在一个项目中,Bison 没有用于所需目标语言之一的代码生成器,并且已经使用了 ANTLR。此外,该语言不是 LR(1),将其重写为 LR(1) 将需要在解析器完成后进行额外的语法检查,从而降低语法作为描述语言的工具的表现力。

所以我现在正在与 ANTLR 一起工作,给它我的语法,而且一切似乎都运行良好。但是 ANTLR 似乎不会在编译时检查歧义。例如,以下语法有歧义:

grammar test;
lst: '(' ')'      {System.out.println("a");}
   | '(' elts ')' {System.out.println("b");} ;
elts: elt (',' elt)* ;
elt: 'x' | /* empty */ ;
Run Code Online (Sandbox Code Playgroud)

输入()可以解释为空列表,也可以解释为由单个空元素组成的列表。生成的解析器选择前一种解释,但我希望能够手动验证该选择。

  • 是否有命令行开关可以用来让 ANTLR 告诉我关于歧义的信息?
  • 或者我可以在语法文件中设置一个选项?
  • 或者我应该使用其他工具来检查语法是否有歧义?
  • 如果是这样,是否有一个已经可以读取 ANTLR 语法的方法,或者我是否必须删除所有操作并将其归结为 BNF?

ANTLRErrorListener.reportAmbiguity方法表明 ANTLR可能能够在运行时执行一些歧义测试。但我想这只会告诉您对给定输入的解析是否有歧义。有什么策略可以利用它来检测所有的歧义,使用一组精心挑选的输入吗?

grammar parsing antlr context-free-grammar antlr4

5
推荐指数
1
解决办法
1143
查看次数

MySQL SELECT来自多个表,多个GROUP BY和group_concat?

我有三个表,我想在MySQ中查询.如下:

**Table: Leaderboard**
Name  | Score
------------
James | 1
Steve | 2
Dave  | 5

**Table: Actions**
Name  | Action       | Time
----------------------------
James | Ate an apple | 01:00
James | Kicked a dog | 02:00
Steve | Ate a dog    | 03:00
Steve | Kicked a hen | 01:00
Dave  | died         | 02:00

**Table: Items**
Name  | Item         | Time
----------------------------
James | Chainsaw     | 01:00
James | Hammer       | 01:05
James | Crowbar      | 01:10 …
Run Code Online (Sandbox Code Playgroud)

mysql group-concat

4
推荐指数
1
解决办法
9709
查看次数

什么是使用键和多个值来改变字典以获得所需输出的Pythonic方法?

手头的问题:

我有以下列表的元组(ID,国家),我将最终存储在MySQL表中.

mylist = [(10, 'Other'), (10, 'India'), (10, 'Unknown'), (11, 'Other'), (11, 'Unknown'), (12, 'USA'), (12, 'UK'), (12, 'Other')]
Run Code Online (Sandbox Code Playgroud)

我想使用以下条件处理'其他'和'未知':

Value       Replaced by => This value
----------------------------------------
Other & Unknown         => Other
A country & Other       => Country
A country & Unknown     => Country
Run Code Online (Sandbox Code Playgroud)

Python:

def refinelist(mylist):

    '''Updating the list to remove unwanted values'''
    '''
    Other & Unknown => Other
    A country & Other => Country
    A country & Unknown => Country
    '''

    if 'Other' in mylist and 'Unknown' …
Run Code Online (Sandbox Code Playgroud)

python mysql dictionary list

4
推荐指数
1
解决办法
137
查看次数

在编译时计算第n个素数

constexpr在我看来,C++ 11的功能,以及模板参数包应该足够强大,可以执行一些相当复杂的计算.我有一个实际应用的一个可能的例子是在编译时计算第n个素数.

我在想办法实现这个计算.如果提出了多个解决方案,那么比较它们可能会很有趣.

为了让你了解我的性能预期:我希望有一些代码可以在合理的桌面硬件上在不到一秒的编译时间内找到第512个素数(即3671).

c++ compile-time template-meta-programming constexpr c++11

4
推荐指数
2
解决办法
3137
查看次数

constexpr替换数学常量,如M_PI

是否有任何C++ 11 constexpr常量可用于代替常量宏<cmath>,即常量M_PI和朋友?或者缺少那些const在运行时提供这些常量的全局值?

c++ constants cmath constexpr c++11

4
推荐指数
1
解决办法
1828
查看次数

如何将ASCII值写入PLC的结构化文本中的字符串?

对于用结构化文本编写的PLC程序,我需要一个以ASCII值开头的字符串0x01 0x01 0x01 0x00 0x12.

在Java中,我会这样做:

String literal = "\x01\x01\x01\x0\x12";
Run Code Online (Sandbox Code Playgroud)

如何在PLC的结构化文本中实现相同的功能?

plc structured-text iec61131-3

4
推荐指数
1
解决办法
1万
查看次数

克隆libxml2文档

在libxml2中克隆XML文档的已解析内存表示形式的最佳方法是什么?

“克隆”是指深层克隆,这是一个独立的数据结构,代表与原始数据相同的数据。“最佳方式”是指在实现复杂性和性能开销之间做出合理的折衷。因此,例如,序列化和重新解析将只需要几行代码,但会产生不必要的解析开销。另一方面,由于所有大小写的不同,手动克隆每个数据结构的每个成员都可能导致数百行代码。

此刻我最好的选择似乎是xmlDOMWrapCloneNode功能。但是,一方面,它的预期目的是克隆单个节点,因此,构建兼容的文档并将其用于接收克隆时,需要格外小心。另一方面,如果必须克隆整个文档,则可以避免其中的某些复杂性。查看代码说明了这里涉及的复杂性。复制和改编所有这些代码似乎太麻烦了。

c xml clone libxml2

4
推荐指数
1
解决办法
638
查看次数

删除除一个以外的所有重复项

我们有一个表,business_usersuser_idbusiness_id我们有重复.如何编写一个删除所有重复项的查询?

mysql sql

3
推荐指数
1
解决办法
3845
查看次数

重写 onSaveInstanceState

我试图掌握onSaveInstanceState课堂上的方法View(而不是课堂上的方法Activity)。该方法确实返回一个Parcelable. View我从该方法中派生ViewGroup并覆盖了该方法以保存我自己的状态。但是当要保存状态时,我遇到了一个例外:

java.lang.IllegalStateException:
Derived class did not call super.onSaveInstanceState()
Run Code Online (Sandbox Code Playgroud)

确实如此,但简单地调用该方法对我来说似乎还不够。那么我应该怎么做呢?如果该方法将传递 aParcel进行写入,我可以简单地将同一个包裹传递给超类,这样事情就会按顺序写入。但这是一个返回值。

我是否应该包含此返回的对象作为我自己的表示的成员Parcelable,并Parcel.writeParcelable在需要时将其与我自己的数据一起封送?或者是否有更好的方法来处理父调用和可分割对象的链接?如果是这样,在加载超类的实例状态时应该使用什么类加载器?

android overriding parcelable android-view instancestate

3
推荐指数
1
解决办法
2547
查看次数