◇ CQueueFunctorとは?

スクリプトでバックグラウンド処理したいものは「キュー」の形で処理されています。
「これ処理しておいて」とキューの形で投げるです。ネットワーク系統が「メッセージ処理」だったゆえキューは「メッセージポンプ」の仕組みかな……、とみていたのですがオブジェクトごと渡せるファンクタが使われておりました。
※ WindowsAPIでは::PostMessageですね。これを投げるとキューとして非同期に処理されます。

◇ ファンクタとは?

オブジェクト自身に作用させる「仕掛け」をファンクタと呼びます。簡単な例としては「食パンを焼く」です。ここで「食パン」がインスタンス化されたオブジェクトです。そこで、ただ焼くのではなく猫の顔でも浮かび上がるようにしたいと考えます。方法としては「2通り」が思い浮かびますね。
1:トースター自体を改造してそのように焼けるようにする。
非常に面倒です。焼く側の改造なので大掛かりですね。そしてこれが「関数」になります。
2:食パン自体に焼かれると猫の顔が浮かぶように仕掛ける。
これが簡単ですね。オブジェクト自身で変化するため、こちらは「ファンクタ」になります。プログラムではオブジェクトに「任意の型」が来たときの作用を記述することができます。bitcoinではoperator()()が多いです。operator()がファンクタを意味しまして、さらに()です。つまり引数なしの場合の作用を書くになります。

◇ operator()()を持つオブジェクトを投げて登録し、キューが実行

コードの方はキューがオブジェクトを取り出しそのオブジェクトに()を与えていました。operator()()はthisポインタを使えますし自由に記述できます。それにより任意の実行が可能になりますね。これと似た考えに関数ポインタを渡すがあります。でも……関数ポインタだとthisポインタがありません。this_callのポインタを渡そうとしても勿論エラーです。オブジェクトで関数ポインタは使えません。そのためのファンクタでした。