ファンクタがよくわからぬ
なんか、コールバックのうまい実装方法ないかなーと思って探してたら、
ファンクタ利用するといいよ!ってどこかに書いてあった(気がした)。
正直ファンクタをあんまりわかってない自分がいるわけですが、
ファンクタってoperator()オーバーロードしただけのクラス?
それじゃ普通にコールバック用の基底クラスと仮想関数つくって、
ポーリングさせて準備できたらその関数呼び出せばいいんじゃね?
とか思ってた。
この時はファンクタはコールバックに利用するための機能かと思ってた。
なんでoperator()をオーバーロードする必要があるのかよくわからなくて、いろいろさまよってたら、
Wikiに載ってる例見てひらめいた。
class compare_class { public: bool operator()(int A, int B) { return (A < B); } }; ... // C++ の並べ替え関数の定義 template <class ComparisonFunctor> void sort_ints(int* begin_items, int num_items, ComparisonFunctor c); ... int main() { int items[] = {4, 3, 1, 2}; compare_class functor; sort_ints(items, sizeof(items)/sizeof(int), functor); }関数オブジェクト - Wikipedia
要は、compare_classであるComparisonFunctor cが、
普通の関数と同じように、
c()で振る舞えるのがうれしいってことか。
それで関数オブジェクト=ファンクタって言うわけね。
正解かどうかわからんから時間がある時に書いてみる。
まずはバグをつぶさねば。
(しかし、この設定は改行による行間空けが反映されなくて困るな。)