int->int
参照によってラムダ パラメータを受け取る関数を定義する正しい方法は何ですか?
void f(std::function< int(int) >& lambda);
また
void f(auto& lambda);
最後の形式が正当な構文であるかどうかはわかりません。
ラムダ パラメータを定義する他の方法はありますか?
int->int
参照によってラムダ パラメータを受け取る関数を定義する正しい方法は何ですか?
void f(std::function< int(int) >& lambda);
また
void f(auto& lambda);
最後の形式が正当な構文であるかどうかはわかりません。
ラムダ パラメータを定義する他の方法はありますか?
auto
パラメータを持つことはできません。基本的に次の 2 つのオプションがあります。
オプション#1:std::function
あなたが示したように使用してください。
オプション #2: テンプレート パラメーターを使用します。
template<typename F>
void f(F &lambda) { /* ... */}
オプション #2 は、埋め込まれたラムダ関数オブジェクトの潜在的なヒープ割り当てを回避できるため、場合によってはより効率的かもしれませんがf
、テンプレート関数としてヘッダーに配置できる場合にのみ可能です。また、他のテンプレートと同様に、コンパイル時間と I キャッシュのフットプリントも増加する可能性があります。ラムダ関数オブジェクトが十分に小さい場合、std::function
オブジェクト内でインラインで表現される可能性があるため、効果がない場合があることに注意してください。
私は次のように使用template
します:
template<typename Functor>
void f(Functor functor)
{
cout << functor(10) << endl;
}
int g(int x)
{
return x * x;
}
int main()
{
auto lambda = [] (int x) { cout << x * 50 << endl; return x * 100; };
f(lambda); //pass lambda
f(g); //pass function
}
出力:
500
1000
100