如果不使用两个单独的支架,今天如何在 C++ 中做到这一点?
typedef std::function<void(int a, int b)> f1;
typedef std::function<void(int a)> f2;
std::vector<f1> m;
void add(f1 f)
{
m.push_back(f);
}
void add(f2 f)
{
// add one more (unused) parameter to f2 so we can add f2 to f1 vector holder?
}
我们能否以某种方式重载 f1 函数以包含不同的参数集? 现在可以通过可变模板或类似的东西解决这个问题吗?
最佳答案
创建一个与新签名匹配的新 lambda 并添加它:
void add(f2 f)
{
m.push_back( [g = std::move(f)](int a, int /* unused */){ g(a); } );
}
关于c++ - 一个 vector/映射中的 std::function 变量参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31919895/