【发布时间】:2020-06-03 04:11:23
【问题描述】:
我可以使用泛型函数类型作为 std::map 的值吗?这消除了为不同的函数参数和返回值编写不同的 std::maps 的需要。
template<class Function,class ... Args>
inline auto FuncWrapper(Function &&f, Args && ... args)-> decltype(f(std::forward<Args>(args)...))
{
return f(std::forward<Args>(args)...);
}
std::map<std::string, FuncWrapper>> FUNCS;
void test_map_operator()
{
FUNCS["MD5"]([](std::string data){ return "MD5: "+ data; }, "some data");
FUNCS["RSA"]([](std::string data, std::string key) {return "RSA: "+ data +':' + key;}, "some data", "some key");
FUNCS["Other"]([](int a, double b, char c){return (c-'0')+a+b;}, 1, 2.0, 'c');
}
【问题讨论】:
-
有趣的想法。我不相信有办法直接做到这一点,因为存储函数的类型会有所不同。不过,可能有一些方法可以通过添加一个间接层来实现这一点。
-
你可以这样做,但这是个坏主意。
标签: c++ function templates stdmap