【发布时间】:2022-01-13 03:55:36
【问题描述】:
我正在尝试通过 c++ 模板管理函数列表。
template<typename T, typename... Args>
std::map<std::wstring, std::function<T(Args...)>> mFuncs;
上面的代码不是正确的句子,但是和上面的代码概念一样,我想把各种类型的函数作为一个List来管理。
void RegisterFuncs()
{
mFuncs.emplace(L"Func1", [&]()->bool{ ... });
mFuncs.emplace(L"Func2", [&](int a, std::string b)->int{ ... });
mFuncs.emplace(L"Func3", [&](std::tuple<int,int>& a){ ... });
...
...
...
mFuncs.emplace(L"Func", [&](args...)->auto{ ... });
}
template<typename... TArgs>
inline auto CallFunc(const wchar_t* pKey, TArgs&&... pArgs)
{
...
...
return mFuncs[pKey](std::forward<TArgs>(pArgs)...);
}
如何实现上述概念?
【问题讨论】:
-
听起来你需要使用像
std::any这样的工具来擦除类型。 -
std::any应该会有所帮助。
标签: c++ templates lambda std-function