我在C ++中练习模板编程,尝试使用模板为教育目的实现某种解析器库。
我的库应该如何使用的一个例子是:
std::stringstream ss { "identif1er 123123 hell0 world 3rror" };
// zM = zero or more , aO = any of
using Identifier = Matcher<Alpha, zM<AlphaNum>>;
using Number = Matcher<Digit, zM<Digit>>;
Matcher<aO<Identifier, Number>> numberOrIdentifier;
while(!ss.eof()) {
if(ss.peek() == ' ') ss.ignore(1);
if(numberLetters.s_match(ss)) {
std::cout << "Token: " << (*numberLetters.val) << std::endl;
} else {
std::cout << "Error\n";
}
}
这是有效的,但我遇到的问题是,有时不得不定义一对依赖于另一种的类型,反之亦然。
我只是想知道我怎么能这样做:
using Expr = Matcher<..... Factor ....>
using Factor = Matcher<aO<Number, Expr>>;
如何仅使用类型而不使用构造函数参数来执行因子的前向声明?它的位置? 注意:即时通讯使用空结构&#34; Self&#34;标记递归。
链接到模板的定义: