std::bind - メンバ関数の束縛がよくわからん

公開:2012-05-18 19:46
更新:2020-02-15 04:37
カテゴリ:c++,シューティングゲーム,ゲーム,ゲーム製作

下記のようなコードを書いたが、std::bindの部分が意図したように動かない。std::functionにstd::bindでthisポインタを保持させたいのだが、どうもthisポインターが指すインスタンスのコピーを保持してしまっているような感じなのである。thisポインタの部分をstd::ref(*this)にしても同じだった。よくわからん..。そもそもこんな使い方だめだっけかな..。


struct WaveTable : public Oscillator
{
  typedef std::vector<float> WaveDataType;
  typedef std::function<void (float * ,float)> ProcessorType;

  WaveTable() : waveCounter_(0.0f),stereo_(false)
  {
    Stereo(false);
  };

  void Process(float * data,float delta)
  {
    // ステレオのときはProcessStereo()を呼ぶ
    // モノラルのときはProcessSMono()を呼ぶ
    processor_(data,delta);
  }

  void ProcessMono(float * data,float delta)
  {
    // モノラル時の処理

  }

  void ProcessStereo(float * data,float delta)
  {
    // ステレオ時の処理

  }

  bool Stereo() const {return stereo_;}
  void Stereo(bool v) {
    stereo_ = v;
    if(v)
    {
      // ステレオのときはProcessStereo()を呼ぶ
      processor_ = std::bind(&WaveTable::ProcessStereo,this,_1,_2);
    } else {
      // モノラルのときはProcessSMono()を呼ぶ
      processor_ = std::bind(&WaveTable::ProcessMono,this,_1,_2);
    }
  }