2

メッセージIDに対応する一連の定数文字列があります。これらの定数は、アプリケーションのさまざまなクラスで使用されるため、一元化された場所を作成しようとしています。私はもともとそれらを含む名前空間を作成しようとしていました:

// MessageIDs.hh
namespace MessageIDs {
  const std::string kMessage1("Message1");
  ...
}

それから私は内部/外部リンケージの定義について読み始めました、そして今私はいくつかの質問があります。

1)定数を作成しないことの唯一の欠点は、定数が内部リンクを持っているため、それらをテンプレート引数として使用できないという事実を外部化することですか?

2)私が気付いていない私のアプローチに他の欠点はありますか?

4

1 に答える 1

2

1) このアプローチには明確な利点が 1 つあります。定義された定数の値が常に適切な場所に表示されます。つまり、定数が extern で定義されている場合、定義を初期化子とともに 1 つの cpp ファイルに配置し、ヘッダーを値なしで extern const のままにする必要があります。これは、サポーターを少し誤解させるでしょう。

あなたが言及した欠点 (テンプレート パラメーターとして使用できない) は、実際には小さなものです。std::string テンプレート パラメーターが必要になることがよくありますか? ありがたいことに、私はそれらを見たことがありません。

2)別の小さな問題は、実際にはヘッダーファイルを含むすべての翻訳単位で std::string オブジェクトが重複していることです。これは欠点と考えることができます。

文字列定数のこの特定のケースでは、 const char* がすべてのケースで最適なソリューションであるように見えます。

于 2011-07-19T20:30:26.377 に答える