(toppers-users 511) RE: TOPPERS/JSP のコンフィグレータ
Takagi, Yusei
yusei-t @ mx15.freecom.ne.jp
2002年 9月 5日 (木) 21:42:09 JST
みなさんはじめまして。高木と申します。
> jsp_perser.cppがperser.cppよりも先にリンクされるとプログラムが正常
> に動作しません。具体的には、perser.cpp642行の
> map<string, class ParseUnit *> Directive::container;
> のコンストラクタが、jsp_perser.cpp204行の
> DECLARE_DIRECTIVE(assigner,"assign_id")
> のコンストラクタよりも先に処理されるようにリンクされないと、正常に
> 動作しません。(StaticAPI::containerも多分同様)
コンフィギュレータのリンク順についてですが、Directive::containerを
静的データメンバではなく、静的メンバ関数にすれば解決しそうな気が
します。
こんな感じです。
map<string, class ParseUnit *>* Directive::container()
{
static map<string, class ParseUnit *> instance;
return &instance;
}
関数内で宣言された静的オブジェクトは、最初に実行パスがそこに
差し掛かったときにコンストラクタが呼ばれますから、リンクの順序に
依存しません。
参考までに。
------------------
高木悠成