functorが関数へのポインタよりもcall backに適する理由

  • 効率の問題.functorは可能ならばその呼び出しがinline化される.一方,関数へのポインタはcall backする側でinline化されることはまずありえない.(関数へのポインタにどの関数へのポインタが代入されているかは実行時にしか解決できないから)
  • overloadの問題.overloadされた関数をcall backとして用いる場合,ポインタは関数のsignature全体が決定されていなければならず,call backする側をgenericに記述することが不可能である(規格書(13.4)を参考).一方functorは,call backとして引き渡す際にoverloadの解決を実際にcall backされる瞬間まで遅延することが可能である.(これはcall backの引数として関数の名前のみを引き渡していると考えることができる)

前者の利点はよく言われることだが,後者の利点はあまり聞いたことがない.というか,そもそも後者のような状況自体がまれである.でもまぁ,自分が実際にこのような事態に直面したのでこういうことを考えたわけだが・・・