にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

やっぱりCでオブジェクト指向的な記述って難しいのね

以前のエントリで挙げた参考サイトでは、Cの記述方法でオブジェクト指向「風」にプログラミングする方法が書いてあったが、クラスの宣言などから丸々オブジェクト指向的な記述にするのは、かえって可読性を損ないそうだなぁ、と少し書いてみてマクロの嵐になってにっちもさっちも行かなくなって気づいた。
これからはもっと正統的なCの記述で、かつ可読性・保守性を保つ書き方を磨こうと思った次第。

思考過程のがらくた

後々何かの参考になるかと思って。(たぶんならない)
記述に規約を持たせれば上手いこと行くかもしれないとか考えてた。

#ifndef OOPCLASS_H
#define OOPCLASS_H

#define OO_class(klass) typedef _OO_##klass_* (klass)

#define OO_new(klass, ...)       klass##_new(__VA_ARGS__)
#define OO_delete(obj)           (obj)->destructor((obj))
#define OO_public(klass, func)   klass##_##func
#define OO_private(klass, func)  klass##_##func

#define OO_super(m)  // <-結局まだここまで到達せず

#endif

これを使ったクラス宣言。

#ifndef HUMAN_H
#define HUMAN_H

#include "oopclass.h"

OO_class(Human);

void OO_public(Human, cry); // <- 引数とる書き方を考えてなくて泣いた

/* accessor method */
char* OO_public(Human, name);
int   OO_public(Human, age);

#endif