c++ - 一个 vector/映射中的 std::function 变量参数

标签 c++ c++11 c++14 std-function

如果不使用两个单独的支架,今天如何在 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/

相关文章:

c++ - 模板中右值引用和 const 左值引用之间的重载

c++ - 读取 std::string,从 std::string 中删除所有特殊字符

c++ - 当数组超出范围时,通过异常检查是否安全?

c++ - 使用 [[deprecated]] 时会发出 3 次警告

c++ - 这段代码是如何工作的?俯仰和偏航

c++ - 检查路径是否有效,即使它不存在

c++ - 为什么这个简单函数的编译器输出如此不同?

c++ - 使用 << 运算符构造 std::string

c++ - C++错误链接器命令失败,退出代码为1(使用-v查看调用)

c++ - B类中的A类初始化包含指向A类的指针