メンバ関数ポインタを数値として扱ってみる(非推奨

メンバ関数ポインタはいろんな事情でvoid*に変換できないので、

boost::any fun = &Class::function;

...

(hoge.*boost::any_cast<省略>(fun))(ry);

みたいな事をしたいけどあんまり負荷が大きいことをしたくない。

メンバ関数ポインタが8バイトの時は

unsigned long long memfun2value(メンバ関数ポインタ fun)
{
    struct Hoge {
        メンバ関数ポインタ f;
    };
    Hoge h;
    h.f = fun;

    return *(unsigned long long*)(&h);
}

メンバ関数ポインタ value2memfun(unsigned long long val)
{
    struct Hoge {
        メンバ関数ポインタ f;
    };
    Hoge h = *(Hoge*)(&val);

    return h.f;
}

こんな感じでできた。最終手段としてはありかもしれんけどあんまやりたくないなぁ。