(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;
}

関数内で宣言された静的オブジェクトは、最初に実行パスがそこに
差し掛かったときにコンストラクタが呼ばれますから、リンクの順序に
依存しません。
参考までに。

------------------
高木悠成