【发布时间】:2020-05-25 12:55:41
【问题描述】:
我似乎无法使用的功能:
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);
}
}
功能: 根据 event 我想将 callback 添加到回调函数的容器中
注意: 每个容器都在std::function
的不同模板化版本上进行模板化我想要达到的目标: 在编译时要评估的表达式,从而根据 event 生成函数体。因此,如果 m_type1Callbacks 在 std::function 上被模板化,则函数:
Add(Event::Type1, [](int foo){std::cout << foo << std::endl;}));
应该添加到m_type1Callbacks
我的问题: 当我尝试上面的代码时,我得到了错误:
'event' is not a constant expression
我需要帮助: 我解决这个问题的方法从根本上是错误的吗?我应该如何改进和解决这个问题?
提前致谢!
【问题讨论】:
-
event是const但不是constexpr。您不能在if constexpr中使用运行时参数
标签: c++ templates static-methods