Как я могу разрешить циклическую зависимость между шаблонами переменных в C ++?

Я занимаюсь шаблонным программированием на 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>>;

Как я могу сделать предварительное объявление фактора, используя только типы и без аргументов конструктора? его возможно ?,
примечание: я использую пустую структуру «Self», чтобы пометить рекурсию.

Ссылка на определение шаблонов:

код шаблона

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]