如何将转换函数转换为lambda表达式
How can I convert my conversion function to a lambda expression?
我有一个带有基本转换功能的C++代码,例如:
void convert(double *x_out, double *y_out, double *x_in, double *y_in)
{
*x_out = *x_in;
*y_out = *y_in;
}
然后,我在代码的后面有另一个函数,它使用一个指向转换函数的函数指针。
void process(void (*converter)(double *x_out, double *y_out, double *x_in, double *y_in), double x1, double y1, double x2, double y2)
{
(*converter)(x1, y1, x2, y2);
// do something
return something;
}
CCD_ 1在代码的其他地方被调用。
void my_func(...args...)
{
process(&convert, _x1_, _y1_, _x2_, _y2_);
}
我想使用lambda函数,而不是函数指针方法。
我不太了解lambdas。
到目前为止,我的最佳猜测是http://en.cppreference.com/w/cpp/language/lambda这http://www.cprogramming.com/c++11/c++11-lambda-closures.html和这个https://msdn.microsoft.com/en-gb/library/dd293608.aspx是:
void my_func(double _x1_, double _y1_, double _x2_, double _y2_)
{
[&_x1_, &_x2_, &_y1_, &_y2_] -> void
{
double x_in = _x1_;
double y_in = _y1_;
double x_out = x_in;
double y_out = y_in;
// return
_x2_ = x_out;
_y2_ = y_out;
}
process(what goes here?, _x1_, _y1_, _x2_, _y2_);
}
我确信lambda的声明在函数my_func
本身内部,这样它就可以捕获局部参数/变量。
但我不知道process()
怎么称呼它?
编辑:要回答以下问题,
有一个函数process
作用于数据对x和y,但在处理对该数据进行操作之前,必须使用转换函数对其进行转换。我举的翻译例子很简单,x->x y->y,但更有趣的例子可能是x->2x,y->0.5y。
错误消息:
no known conversion for argument 1 from
‘namespace::classname::my_func(uint32_t, uint32_t, uint32_t,
uint32_t)::<lambda(int32_t*, const int32_t*, int32_t*, const
int32_t*)>’ to ‘void (namespace::classname::*)(int32_t*, const
int32_t*, int32_t*, const int32_t*) {aka void
(namespace::classname::*)(int*, const int*, int*, const int*)}’
示例中的参数应该是int32_t
,而不是double,但这显然不是最重要的。
非捕获Lambda可以无缝转换为函数指针。你似乎不需要在这里捕捉。以下代码可以工作:
void my_func(double _x1_, double _y1_, double _x2_, double _y2_)
{
auto lam = [](double* x_in, double* y_in, double* x_out, double* y_out)
{
*x_out = *x_in;
*y_out = *y_in;
};
process(lam, _x1_, _y1_, _x2_, _y2_);
}
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- C++:Lambda 函数指针转换的用例是什么?
- 错误:无法将"<lambda(double)>"转换为"double(*)(double)"
- 如何将 boost::hana::map 转换为 lambda
- 将 lambda 函数转换为具有混合 lambda 引入器和参数列表的函子结构
- 如何将函数转换为 lambda 函数
- 将转发 lambda 转换为函数指针
- 如何将C++ lambda 函数代码转换为 C#?
- 使用动态强制转换的 Lambda
- C++ 转换和 lambda - 替换循环
- 将 lambda 函数转换为另一个编译单元中的普通函数会缩短编译时间吗?
- Lambda在CPP中转换为NULLPTR
- C lambda函数转换误差
- 我的lambda在复制构建期间没有正确转换捕获的"this"
- lambda 转换为布尔值,而不是推导函数指针类型
- 将函数转换为find_if lambda
- 如何将功能机体转换为lambda
- 如何使用C lambda将成员功能指针转换为普通功能指针,以用作回调
- Lambda 转换的函数指针比较
- 具有转换函数的 lambda,指向具有 C++ 链接的函数的指针