[解決済み] ラムダ関数は再帰的か?重複
2023-06-14 23:40:39
質問
重複の可能性があります。
c++0x における再帰的ラムダ関数
以下はごく普通の再帰関数です。
int fak(int n)
{
return (n <= 1) ? 1 : n * fak(n - 1);
}
このような再帰的な関数をラムダ関数として書くにはどうしたらよいでしょうか。
[](int n) { return (n <= 1) ? 1 : n * operator()(n - 1); }
// error: operator() not defined
[](int n) { return (n <= 1) ? 1 : n * (*this)(n - 1); }
// error: this wasn't captured for this lambda function
現在のラムダを再帰的に呼び出せるような式はありますか?
どのように解決するのですか?
はい、できます。変数に格納し、その変数を参照することができます(ただし、その変数の型は
auto
と宣言することはできませんが、その場合は
std::function
オブジェクトを使わなければなりません。) 例えば
std::function<int (int)> factorial = [&] (int i)
{
return (i == 1) ? 1 : i * factorial(i - 1);
};
それ以外の場合、いいえ、あなたは
this
のポインタをラムダ本体の内部から参照することはできません。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み] テスト
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] C++11の再帰的ラムダ関数
-
[解決済み] std::function vs テンプレート