繁体   English   中英

C++ static 评估模板化参数

[英]C++ static evaluation of templated argument

Function 我似乎无法开始工作:

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<>不同模板版本上进行模板化

我想要达到的目标:在编译时评估的表达式,从而根据event生成 function 主体。 因此,如果m_type1Callbacksstd::function上模板化,则 function:

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

应该添加到m_type1Callbacks

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

'event' is not a constant expression

我需要什么帮助:我解决这个问题的方法从根本上是错误的吗? 我应该如何改进和解决这个问题?

提前致谢!

如果您将event作为 function 的模板参数,您将能够在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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM