如何解决c ++中可变参数模板之间的循环依赖?

时间:2016-10-26 17:19:56

标签: c++ templates cyclic-dependency

我在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;标记递归。

链接到模板的定义:

templates code

0 个答案:

没有答案