お久しぶりです、もうそろそろ2017年も終わりですね。

「年」関係で少し面白い記事を見つけたので載せておきます。

Unicode Standardの元号の説明の問題は変わっていなかった
(http://yanok.net/2016/07/unicode-standard-1.html)


メンバ関数のポインタ

C++のメンバ関数のポインタの扱いがよくわかっていないので、少し実験してみました。

メンバ関数のポインタは、ただの関数ポインタと同じように扱うことができません。

メンバ関数で問題となるのは、インスタンスが絡んでくることです。メンバ関数には暗黙的にthisポインタが渡されるそうですが、仕様書を読んでないので詳しくは知りません。

試行錯誤の末、メンバ関数をコールバックする為に下のようなコードを書きました。

これはクラス内で定義したメンバ関数を、グローバルの関数に渡し呼び戻します。

コンパイラのメッセージを見てみるとTvoid (MyClass::*)()型でUMyClass*型でした。

クラスのメンバ関数ポインタとそのインスタンスへのポインタがあれば、何とかコールバックできるだろうと思っていましたが、結果的にその通りでした。

(改めて見てみるとまぁそうだよなとか思ったり)

ちなみにp->*f()*p.*f()に置き換えても問題ないです(まぁそうだろな)

ちょっとしたことだと別にSTL使わなくてもよくね、とか思いましたが、例外処理とか考えると面倒そうです。

ライブラリやフレームワークだったら自前で用意してるケースを見かけたのでそういう時は役に立つかも。


では、よいお年を

Tags:

コメントを残す

メールアドレスが公開されることはありません。