1

奇妙なことに、このテーマに関するオンライン ドキュメントはほとんどありません。UI 用にハードコードされた文字列を含むアプリケーションと、ソース全体に散在するさまざまなものがあります。アプリケーションがコンパイルされているプラ​​ットフォームに応じて、それらの多くを変更する必要があるため、少なくともいくつかを切り上げようとしています。

ここでは 2 番目の例(参照用に以下にコピー) を使用しましたが、これが実際にどのように機能するかの詳細についてはやや軽快です。すべてが再初期化されproject_strings.cpp、コードが実際に呼び出されることはないようです。

// in your project_strings.h
namespace MyProjectStrings {
const char *password;
...
}

// the project_strings.cpp for the strings
#include "project_strings.h"
namespace MyProjectStrings {
const char *password = "Password:";
...
}

// some random user who needs that string
#include "project_strings.h"
std::string password(MyProjectStrings::password);

誰かがこれを説明できますか、それともひどい考えだと私に言うことができますか?

4

1 に答える 1

0

リンクする例はconst char*、ヘッダー ファイルの名前空間でいくつかの s を宣言し、それらを .cpp ファイルで定義するだけです。ただし、使用されている構文は C++ では正しくありません。ヘッダー ファイルでの宣言は、値が C++ の内部リンケージにデフォルト設定されているためextern const char*ではなく、そうする必要があります。const char*const

ほとんどの C++ コンパイラ/リンカー ツールチェーンは、1 つの変換単位 ( project_strings.cpp) からのすべての文字列をまとめて、結果の実行可能ファイルの読み取り専用データ セグメントに配置します。

これは、静的文字列を処理する合理的でシンプルなアプローチですが、ローカリゼーションやその他の複雑さを処理する必要がある場合は、もう少し動的で洗練されたものが必要になるでしょう。

于 2015-04-22T15:04:20.160 に答える