如何从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;
};
但是编译器说实例化必须将args打包在类的最后一行。当我尝试编写“ HSMSimple