ヘッダに定義されたクラスメンバ関数の場合を格納変数static
とします。ヘッダーを複数のコンパイル単位に含めると、static
変数の複数のコピーが作成されます。しかし、the compiler will fix this for youと出力された変数の1つを選択するだけです(これはインライン展開とは異なります)。これは、可能なタイプのシンボル、正確にはgnu_unique_object
のGNU固有の拡張によって可能になります(では "u"と表示され、 "ユニークなグローバルシンボル"のマニュアルページで呼び出されます)。手動でgnu_unique_objectシンボルを作成
問題は、コンパイラが任意の変数に対してこの種のシンボルを生成するにはどうすればいいですか?私は、この動作を得るために、クラス内のものをラップするのにうんざりしています。
あなたが提供するリンクは、具体的にはロード可能なモジュール(別名共有ライブラリ)のために実装された動作について説明します。静的変数を使うつもりなのでしょうか?あなたは複数のコンパイルユニットについて話しますが、複数の共有ライブラリは話しません。もしそうでなければ、あなたは確かに物事を簡単にすることができます。最後にこれらの変数に期待される動作を教えてください。 – dim
@dim共有ライブラリ用に実装されているかもしれませんが、gccはそれを使って私が記述した動作を実装しています。 –
ファインですが、私はまだ理解していません。「静的な記憶変数を持つヘッダーに定義されたクラスメンバー関数」と言うとき。 「静的記憶域で定義され、あるクラスのメンバー関数の本体で宣言された変数」を意味しますか?または、「メンバ関数」と「静的記憶域を持つメンバ変数」の両方を含むクラスですか? – dim