標準string互換クラスとその意義について




yaneSDK3rdではC++標準で定義されているstringクラスと互換のstringクラスを用意しています。このstringクラスを用意する理由は、VC++6とVC++.NETとではstringクラスの実装が異なるので、VC++6で作成したDLLに対してVC++.NETで作成した実行ファイルからstringデータをやりとりしようとしたときに問題が生じるからです。

つまり、唯一無二、絶対不変のstringの実装が必要なのです。この意味では、STLPortでも実装が変化しないことを約束されているわけではなく、条件を満足しません。そこで、(簡単なものでも良いので)自作する必要があったのです。

string.hは、yaneSDK3rdのYTL/string.hにあります。stringクラスのデータフォーマットは以下のようになっています。(この部分は何があっても変更することはありません)

枠-1
    E*          m_pszBuffer;
    size_type   m_nLength;
    //  nLength!=0 のとき、m_pszBufferは、
    //  sizeof(E) * (m_nLength+1)確保されている
    //              (↑+1なのは終端文字列があるので)
    size_type   m_nCapacity;    //  確保したサイズ(2^n単位で確保)


やねうらお版のstringクラスを用いるかどうかは、config/yaneConfig.hで簡単に変更できます。(以下の部分)

枠-2
#define USE_yaneString
//  stringクラスは、やねうらお版を用いる


このシンボルが定義されてれば、やねうらお版のstringクラスを使用します。ディフォルトでは使用する設定になっています。