gpt4 book ai didi

c++ - 类方法接受代表各种数量参数的函数的 lambda

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:47 25 4
gpt4 key购买 nike

我想将函数传递给泛型类方法,这样泛型类就可以调用不需要 args、一个 arg、两个 args 等的函数。

我见过可变参数模板,但我不喜欢这种语法。之前的一个 SO 问题建议传递 lambda,包装函数:

https://stackoverflow.com/a/48976528/997112

答案是:

void run_callback(std::function<void()>& func) 
{
func();
}

run_callback([]{ func_without_params(); });

因此我添加了一个不需要参数的方法:

void func_without_params()
{
std::cout << "x" << std::endl;
}

但是当我打电话时:

run_callback([]{ func_without_params(); });

在 VS2013 中,智能感知检测到一个错误,我得到了编译器错误:

error C2664: 'void run_callback(std::function<void (void)> &)' :
cannot convert argument 1 from
'main::<lambda_de925f4d5cd926a8bb664f9c057a7a19>' to
'std::function<void (void)> &'

什么是 main::<lambda_de925f4d5cd926a8bb664f9c057a7a19>类型?我不完全理解这个错误。

最佳答案

除了邪恶的编译器扩展之外,您不能使用非左值的东西来初始化非常量引用(参数 func)。使参数为常量:

#include <functional>
#include <iostream>

void run_callback(std::function<void()> const &func)
{
func();
}

void func_without_params()
{
std::cout << "x" << std::endl;
}

int main()
{
run_callback([] { func_without_params(); });
}

关于c++ - 类方法接受代表各种数量参数的函数的 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54116511/

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