C++相談室 part10
■ このスレッドは過去ログ倉庫に格納されています
0440デフォルトの名無しさん
NGNGとりあえずやるほうほう。うまいかどうかはさておき。
(1)Cっぽいが安全
XXX_init() と XXX_end() を用意して、利用者に呼ばせる。
コンストラクタの呼ばれる順番に依存しないため、
それに起因するバグに悩む必要がなくなる。精神衛生上よろしい。
(2)C++にこだわる
初期化ルーチンをLIB_Initクラスのinit()メソッドに突っ込む。
LIB_Initクラスのインスタンス(init_obj)をグローバル変数として持たせる。
そのライブラリの関数全てが、最初にinit_obj.init()を呼ぶようにする。
(ライブラリを使う限り、このインスタンスはリンクされる)
LIB_Initクラスのデストラクタは、ライブラリの終了処理をする。
(2')init()を遅らせる必要がないなら、LIB_Initのコンストラクタで
初期化し、Lib_Init::check()で初期化の成否を返すようにし、
check()をライブラリの各関数が最初に呼ぶようにすればよい。
2,2'ともに、そのライブラリが全く呼ばれなければ
init_objが生成されない。よって気前よくリンクできる。
ただし、同じやり方をする複数のライブラリが相互に参照する場合は
大変面倒なことになったりするので(1)に回帰することもしばしば。
■ このスレッドは過去ログ倉庫に格納されています