我正在使用boost.xpressive静态模板来构造正则表达式,这些正则表达式将动态地连接成最终表达式。
动态版本具有可变宽度的重复,但是由于要在int向量中进行操作,因此我确实需要使用静态构造。
我确实需要创建repeat<N,M>
,其中N
和M
不是常数。
如何做到?
答案 0 :(得分:0)
不幸的是,C ++仅允许您传递在编译时(请参阅here)(也称为constant expressions)已知的模板参数。
在这种情况下,这意味着输入到repeat<N, M>
中的值必须是文字或常量表达式,因此您不能只输入程序中的任何int
。
很难在不看到任何代码的情况下给出更具体的建议,但是似乎您正在尝试创建一个正则表达式,该正则表达式例如与某组/文字的n
重复匹配,而n
不是尚未在编译时知道(即,取决于程序的某些输入)。
这似乎是一个奇怪的用例,毕竟,正则表达式通常是编译时间常数(这是boost-xpressive存在的原因)。
我建议改为使用动态(普通)正则表达式。无论如何,都会对正则表达式进行编译(已对其进行预处理以加快匹配速度)。
通常,一次生成一个正则表达式,然后多次使用它来匹配不同的字符串。因此,就性能而言,预处理步骤通常可以忽略不计。