Iは、次のような基本的な変換関数とC++コードを有する:変換関数をラムダ式に変換するにはどうすればよいですか?
void convert(double *x_out, double *y_out, double *x_in, double *y_in)
{
*x_out = *x_in;
*y_out = *y_in;
}
Iは、次に変換関数に関数ポインタを取り、後で自分のコード内の別の機能を有します。
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;
}
process
は、コードの別の場所で呼び出されます。
私は、関数ポインタの代わりにラムダ関数を使用します。
私はラムダの周りに頭を上げることはできません。これまでのところ、この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_);
}
それが取り込むことができるように、私は、ラムダの宣言が機能my_func
自体の内部に入るかなり確信していますローカル引数/変数。
でも、私はそれをprocess()
から呼び出す方法がわかりません。
編集:、以下
を質問に答えるためのデータ、xとyのペアに作用するが、このプロセスは、このデータを操作する前に、それは翻訳機能を使用して変換する必要があります機能、process
があります。私が翻訳として与えた例は、単純に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
ではなく、二重されている必要がありますが、これは最大限の重要性を明確にではありません。
'process'を変更できますか? – NathanOliver
あなたは何を達成しようとしていますか?単に関数ポインタの代わりにラムダを使用するだけで、XYの問題が発生します。本当に必要なことを教えていただければ、適切な解決策を提案することができます。今は一般的にラムダだけを教えてもらえますが、これは仕様の繰り返しです。 – SergeyA
@SergeyA私の編集支援はまったく役に立ちますか? – user3728501