問題タブ [static-initialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - c++ での静的メンバーとカプセル化
次のクラスを想定します。
FileManipulator
は、両方のファイルのデータを使用して から出力を取得しますgetResult()
。これは、複数の反復と、さまざまなオブジェクトに対する via 反復filetwo
の複数の構築を意味します。入力は、たとえば、いくつかの .csv データベースです。タスク全体で同じままです。FileManipulators
InputTypeTwo
InputTypeOne
プログラム自体はマルチモジュラーであり、上記の操作はその小さな単位にすぎません。
static
私の質問は、オブジェクト指向のパラダイムとカプセル化に従って、そのフィールドをどのように処理できるかです。このフィールドは、さまざまなプログラムの実行で固定値ではないため、何らかの方法で初期化する必要があります。私が C++ のルールを理解している限り、フィールドを設定するメソッドを作成することはできませんが、フィールドをパブリックにして、任意のクラス (FileManipulator
または友好的なクラス) の外で初期化することは、カプセル化と矛盾しているように思えます。
その場合、私は何ができますか?私の頭に浮かぶ唯一のことは、Cの方法でそれを行うことです。つまり、十分に分離されたコンパイルユニットで初期化します。私にできることは本当にそれだけですか?それは専門的な方法でどのように解決されますか?
編集
当初の意図であった定数へのポインタを定数へのポインタに修正しました。
c++ - 静的な初期化順序と文字列の連結
static const std::string
パラメータ名として使用されるいくつかの場所で sを定義するかなり大きなプロジェクトがあります。それらのいくつかは、静的初期化中に連結する必要があります。
foo.h:
foo.cpp:
bar.h:
バー.cpp:
baz.h:
baz.cpp:
static const
メンバーが初期化される順序が定義されていないため、問題は明らかに「静的初期化の大失敗」です。
私は通常の解決策が嫌いです。つまり、これらの変数をすべて関数に置き換えます。
- これらの変数はたくさんあります。つまり、コードの変更がたくさんあります。
- 連結には特別な関数が必要なため、コード ベースの一貫性が失われ、さらに見苦しくなります。
私は現在、C++ 11を使用できません。これにより、その機能で物事が簡単になりconstexpr
ます(と思います)。
問題はstatic const std::string
、 s (またはラッパー オブジェクトなど)を連結して別の s を初期化できるトリックはありますstatic const std::string
か?
java - コードに影響を与えることなく、アプリケーションの起動時に scala.Predef の初期化を強制します
クラスの初期化はscala.Predef
、アプリケーションの予期しない速度低下を引き起こす可能性があり、タイミングが重要な状況 (プログラミング コンテストなど) で問題になる可能性がある、遅延の重い操作です。
scala.Predef
コードを変更せずに、scala コンパイラまたは VM オプションのみを使用して、アプリケーションの起動時に遅延をオフにして強制的に初期化することはできますか?
c# - 静的イニシャライザ/コンストラクタの順序付け
今日、興味深いバグに遭遇しました。以下のコードは、一部のマシンではコメント行でクラッシュし、他のマシンではクラッシュしませんでした。この問題は、静的コンストラクターと静的イニシャライザーの順序付け、および継承に関連しているようです。
修正は #region のコードを別のクラスに移動することでしたが、実際に何が起こっていたのか、なぜ一部のマシンでのみ発生したように見えるのか、まだわかりません。
私はこれらの 2 つの記事を見てきました:
http://csharpindepth.com/Articles/General/Singleton.aspx
http://csharpindepth.com/Articles/General/BeforeFieldInit.aspx
これはある程度の洞察をもたらしますが、継承が物事にどのように影響するかについては触れていません。
java - 外部クラスの静的初期化子は、内部列挙型が初期化される前に実行されることが保証されていますか?
構成ファイルからいくつかのログ メッセージを読み込もうとしていますが、enum
名前を s と入力するときにタイプミスに遭遇するのではなく、を介してそれらの名前を参照したいと思いますString
。だからここに私のセットアップがあります:
私の懸念は、 s が初期化Log
される前に静的初期化子が実行されない、いくつかのフリンジ シナリオがあるかもしれないということです。enum
私はコードをテストしましたが、これまでのところ正常に動作し、論理的には、静的初期化子が最初に実行されないMessage
可能性があることはわかりません (参照は を通過Log
する必要があるためLog.Message.IOEXCEPTION
)。それでも、私はセットアップについて少し不安であり、アプリがクラッシュする可能性のある抜け穴を残したくありません. それで、これは安全ですか?