http://d.hatena.ne.jp/RiSK/20071122/1195704185
参考:C言語でOOP - methaneのブログ
トラバ記念! by RiSK
Web拍手、ありがとうございまーすヽ(゚∀゚)ノ
ちゃんとvtableを作って(継承もできるし)多態も実現できますし,宣言と定義を工夫してアクセス制御(public, protected, private)も実現できます。これだけできれば,C言語でもOOPできると(氏のように)言えると思います。
調べてみるとありますね、C言語でオブジェクト指向を扱う方法。
なんていうか……singletonが作りやすそうですね、えぇ[´・[ェ]・]
もっと言っちゃえば,マクロを使って(テンプレートは難しいですけど)ジェネリックも実現できますし,例外も(setjmp, longjmpを使って)実現できますし,スレッドも(実験したことないですけどsetjmp, longjmpを使って)作れるので今流行りの(?)並列処理もできます。
もっと言っちゃえば、Javaだってstaticメソッドを使って関数も実現できますし、構造体はクラスで実現できますし、グローバル変数はsingletonを……ごめんなさい、なんとなく対抗したかっただけです。
setjmpとlongjmpでスレッドって発想は面白いですね。スレッドの切り替えをプログラマが完全に制御できて。
って、あれ……これ国家試験の勉強でみたなぁ。確かアセンブラでやるんじゃなかったっけ、こういう並列処理って。
確かにオブジェクト指向・ジェネリック・例外・スレッド・その他諸々をC言語で再現するのは可能でしょう。けど……けどね、
ヽ j .す マ. ゙, l. ご ゾ ! ', く い ', ', : で ト-、,,_ l す ! `ヽ、 ヽ、 _ ; / ヽ、`゙γ'´ / \ ! ト, ヽ ヽ__ ___ノ ,! | | ト, ゙、 レ'゙ ,イ ./|! .リ | リ ! .|! | ト|ト} ,イ ,/ ./〃/ / | / .リ/ //イ|.リ // //ノノ //゙ ノ'////|.リ/ ´彡'゙,∠-‐一彡〃 ト.、,,,,,,,,,,,レ゙ 二ニ-‐'''"´ /`二、゙゙7 ,,ァ''7;伝 ` {.7ぎ゙`7゙ ゞ‐゙'' ,. ,. ,. l`'''゙" ,' 〃〃" ! | ! l ! (....、 ,ノ ! j `'゙´ ,' ー--===ァ / _ _ ./ \ ` ̄ ,/ ` .、 / :ミ:ー.、._ /``'''ー-、 `゙三厂´