类中的C ++递归可变参数模板

时间:2018-09-30 19:22:20

标签: variadic

如何从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 m_nextLevel;”时随之而来的是更多的混乱。我觉得还需要更多技巧,但无法弄清楚是什么。

0 个答案:

没有答案