2

現在、アイテム (武器、防具など) をランダムに生成するプログラムに取り組んでおり、アイテムに付けられるすべての名前を保持するグローバルな定数ベクトルを作成したいと考えています。この 2D ベクトルを、他のすべてのクラスで使用できる (ただし変更はできない) ヘッダー ファイルに入れたいので、宣言時に初期化する必要があります。

以前は以下を使用していました。

static const std::string v[] =
{
    "1.0", "1.1", "1.2", "null"
};
const std::vector<std::string> versions( v, v+sizeof( v)/sizeof( v[0]));

これは 1D ベクトルでは機能しましたが、2D ベクトルを使用して項目名を保存したいと考えています。

以下を使用してみましたが、メンバー関数 (size() など) がないことを意味します。

static const std::string g_wn_a[] = { "Spear", "Lance", "Jouster" };
static const std::string g_wn_b[] = { "Sword", "Broadsword", "Sabre", "Katana" };
const std::string* g_weapon_names[] = { g_wn_a, g_wn_b };

また、すべての名前を格納するためにクラスを使用したくありません。変数を使用するたびにすべての名前を格納する変数を作成するのは非効率的だと思うからです。

私の問題を解決する方法を知っている人はいますか?

4

2 に答える 2

1

const staticメンバーを持つクラスを使用できます。この方法では、クラスは名前空間のように動作し、名前を使用するために名前保持クラスのインスタンスを作成する必要はありません。

struct MyNames {
    // const static things
    const static string myweapon = "Katana"
};

string s = MyNames::myweapon; // s = "Katana"
于 2012-10-20T21:44:34.980 に答える
0

これは C++ であるため、これを行う最も一般的な方法は、コンストラクターでこれを行うクラスを作成し、そのクラスの const オブジェクトを作成することです。次に、クラスはさまざまなメンバー関数を提供して、保持するさまざまなアイテムを照会します。

おまけとして、これにより、コードの残りの部分でさまざまな項目を簡単に使用できるようになります。

于 2012-10-20T21:47:48.483 に答える