gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:47:46 25 4
gpt4 key购买 nike

我似乎无法开始工作的功能:

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 在 std::function 上模板化,则函数:
Add(Event::Type1, [](int foo){std::cout << foo << std::endl;}));

应该添加到 m_type1Callbacks

我的问题:
当我尝试上面的代码时,出现错误:
'event' is not a constant expression

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

提前致谢!

最佳答案

如果您制作 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);
}
}

关于模板化参数的 C++ 静态评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62002852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com