C++静态评估模板化的参数

问题描述 投票:0回答:1

功能,我似乎不能用了。

void Add(const Event &event, T callback) noexcept
    {
        if constexpr (event == Event::Type1)
        {
            m_type1callbacks.push_back(callback);
        }
        else if constexpr (event == Event::Type2)
        {
            m_type2Callbacks.push_back(callback);
        }
        else if constexpr (event == Event::Type3)
        {
            m_type3Callbacks.push_back(callback);
        }
        else if constexpr (event == Event::Type4)
        {
            m_type4LeaveCallbacks.push_back(callback);
        }
    }

功能: 根据 事件 我想加 回调 到一个回调函数的容器

注:每个集装箱都是模板化的 不同 的模板 std::function<>

我想实现的是:在编译时对表达式进行评估,并根据以下情况生成函数体。事件. 所以,如果 m_type1Callbacks 绘于 程式,该函数。

Add(Event::Type1, [](int foo){std::cout << foo << std::endl;}));

应该添加到 m_type1Callbacks

我的问题:当我尝试上面的代码时,我得到了错误。

'event' is not a constant expression

我想得到的帮助:我解决这个问题的方法是否有问题?我应该如何改进和解决这个问题?

先谢谢你

c++ templates static-methods
1个回答
2
投票

如果你做了 event 的模板参数,你将可以在函数的 constexpr 语境。

template <Event event>
void Add(T callback) noexcept
{
    if constexpr (event == Event::Type1)
    {
        m_type1callbacks.push_back(callback);
    }
    else if constexpr (event == Event::Type2)
    {
        m_type2Callbacks.push_back(callback);
    }
    else if constexpr (event == Event::Type3)
    {
        m_type3Callbacks.push_back(callback);
    }
    else if constexpr (event == Event::Type4)
    {
        m_type4LeaveCallbacks.push_back(callback);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.