C++でメンバ関数をコールバックする

member-callback.png

現在はC++11のfunctionalヘッダのmem_fnを使う。
コールバックしたいメンバ関数の引数は何個でもok

概要

std::mem_fn(&クラス名::メンバ関数)(クラスのインスタンス,引数1,引数2,...);

サンプルコード

#include <functional>//mem_fnに必要
#include <iostream>
 
struct Test{
 
    int add(int a,int b) {
        std::cout << a<<"+"<<b<<"="<<a+b<< '\n';
        return a+b;
    }
};
 
int main() {
    Testm;
    std::mem_fn(&Test::add)(m,5,3);
}

出力結果

5+3=8

C++11以前

C++11がなかったころ,functionalヘッダのmem_fun_tとmem_fun1_tを使う方法があった。

  • mem_fun_t…引数のないメンバ関数
  • mem_fun1_t…引数が1つのメンバ関数

が可能だった。つまり、引数が2個以上のメンバ関数は、面倒くさい手続きをしない限りできないということ。
たとえば、引数を1つの構造体にまとめるとか。
解決策としてかつてはboost::mem_fnが使われていた。
現在はC++11の標準機能でmem_fnがあるので必要ない。

OpenGLのコールバック関数としてメンバ関数を登録できる??

試みたけど、できなかった
でも、GLFWを使えば、ウィンドウに自分の好きなポインタを入れておくことができるので、
OpenGLとオブジェクト指向の両立が可能です。


callback

サポートサイト Wikidot.com callback