【C++】ラムダ式でメンバ変数をキャプチャする

メモ。

メンバ関数内でラムダ式を使う時、メンバ変数をキャプチャするにはthisをキャプチャする。

struct Hoge {
  int n;
  void f() {
    auto lambda = [this]() -> int {  // this をキャプチャ
      return n * 2;                  // メンバ n を使う
    }
    std::cout << lambda() << std::endl;
  }
};

[&]で全オブジェクトを参照キャプチャしてもthisは含まれる。

ご冥福をお祈りします


任天堂の岩田社長が逝去されたそうです。

確かにやせてはいたけど、亡くなるなんて、そんな様子全然なかったのに!
めっちゃショックΣ(゚д゚lll)


ご冥福をお祈りします。

【C++】private コンストラクタに、メンバ関数から呼ばれた外部の関数からアクセスする

かなり限定的ですが、タイトルのような状況にぶち当たったので。


コンストラクタを private にして、create() みたいな static メンバ関数を作ってオブジェクトを作成するというイディオムがあります。

class hoge {
  hoge() { }  // private コンストラクタ

public:
  // この関数を使わないと、hoge オブジェクトは作成できない
  static hoge* create_hoge() {
    static hoge h;
    return &h;
  }
};

シングルトンなんかを実装するときに使われるテクニックですね。

続きを読む