2009-01-04

http://anond.hatelabo.jp/20081231194010

関数ポインタバッドノウハウになっているよ、確かに。

じゃぁ、何がグッドノウハウかというとC++継承、メンバ関数、Virtual関数

C++継承やVirtual関数は中身はvtableでvtableって何のこと?っていうと

関数ポインタの集合だから。

アセンブラがCALL命令

Cが関数ポインタで実装しているところを

C++ではそれをうまくオブジェクト指向継承という概念に持ち込んでいる。

ほとんど使われていないけど、いちおう、クラスのメンバ関数関数ポインタという概念

スタティック(メンバ)関数の中に素の関数ポインタは残ってはいる

だから、今でも関数ポインタを使うのは 本当に1部の残された領域と

高速化のために継承じゃ追いつかない所をハンドメイドで書くぐらいだと思う。

ただ、こうやって書くと他の言語も・・・といわれそうだけど、

インタプリタのメンバ関数呼び出しとVtableによるメンバ関数呼び出しは

見かけは同じように見えても、(実行速度とか含め)全く別物だからという注釈は書いておこうかなと。

記事への反応 -
  • 関数ポインタはバッドノウハウどころか、手続き的な抽象を使いたいところで多用しますぜ。 C++やオブジェクト指向言語だと 継承と仮想関数を使うけど、同じようなケースで C言語では...

    • そういうのはバッドノウハウとは言わないの?(「本来想定されていない使い方をするために、工夫してできるようにしちゃうノウハウ」を指してバッドノウハウと言うんだと思ってたか...

      • そういうのはバッドノウハウとは言わないの? 関数ポインタをバッドノウハウとは言わないでしょ。C言語自体がバッドノウハウと言うなら、当たりだけど:) 手続きという抽象はまこと...

        • 関数ポインタで、例示された5つを実現するのはバッドノウハウじゃないの? 「関数ポインタを使ってプログラミングしましょう」というプログラミングスタイルは、正統派ではないと...

          • 例示された 5つ が 動的コード操作のことを指しているのなら、そりゃバッドノウハウかもね。 でも関数ポインタは… 「関数ポインタを使ってプログラミングしましょう」というプロ...

            • 関数ポインタはバッドノウハウになっているよ、確かに。 じゃぁ、何がグッドノウハウかというとC++のVirtual関数 C++の継承やVirtual関数は中身はvtableでvtableって何のこと?っていうと 関数...

              • 関数ポインタがバッドノウハウ的であるような根拠があれば納得できるんだけど。 オブジェクト指向だってバッドノウハウじゃない?ツリーの途中で指摘されてなかった? 昨日からお前...

            • うーん。 K&Rでも「5.11関数へのポインタ」で触れられてるのはqsortの話だし、そこで「関数へのポインタを定義できるよ」とはある。個人的にこれは意図していないけど載ってることだ...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん