クラスメンバへのポインタ

某所で書いているプログラムで, std::thread() にクラスのメンバ関数を渡したいなーってことがあった.
std::thread::thread - cppreference.comにもそれっぽい記述がないのでググっていると, どうやらこんな感じにするらしい.

c++ - Start thread with member function - Stack Overflow

#include <iostream>
#include <memory>
#include <thread>

class nyan {
  std::unique_ptr<std::thread> th_;

public:
  void run() {
    th_ = std::make_unique<std::thread>(&nyan::worker, this);
  }

  ~nyan() {
    th_->join();
  }

private:
  void worker() {
    std::cout << "Nyan!!" << std::endl;
  }
};

auto main() -> int {
  nyan n;
  n.run();
}

この&nyan::workerみたいな記述がサッパリわからなかったので, C++のクラスのメンバ関数のポインタを調べたときのメモ.

Read More »