Как я могу получить этот тип использования из моего компилятора C ++?Рассмотрим очень простой иерархический конечный автомат, где вы можете указать состояния уникальных перечислимых типов (перечислимый класс).Вот некоторый псевдокод варианта использования:
enum class lev0
{
start,
end
};
enum class lev1
{
start,
end
};
enum class lev2
{
start,
end
};
HSMSimple<lev0, lev1, lev2> hsm_lev0;
const HSMSimple<lev1, lev2>& hsm_lev1 = hsm_lev0.nextLevel;
const HSMSimple<lev2>& hsm_lev2 = hsm_lev1.nextLevel;
switch (hsm_lev0)
{
case lev0::start:
switch (hsm_lev1)
{
case lev1::start:
switch (hsm_lev2)
{
case lev2::start:
break;
case lev2::end:
break;
}
break;
case lev1::end:
break;
}
break;
case lev0::end:
break;
}
...
Идеи?Я попробовал класс как таковой:
template<typename arg1, typename ... TArgs>
class HSMSimple
{
public:
operator const arg1&() const { return m_lev1; }
operator arg1() { return m_lev1; }
const HSMSimple<TArgs>& nextLev() const { return m_nextLevel; }
HSMSimple<TArgs> nextLev() { return m_nextLevel; }
protected:
arg1 m_lev1;
HSMSimple<TArgs> m_nextLevel;
};
Но компилятор говорит, что экземпляр должен упаковать аргументы в этой последней строке в классе.Когда я пытаюсь написать 'HSMSimple m_nextLevel;'только больше хаосаЯ чувствую, что нужно больше обмана, но не могу понять, что.