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]));

这适用于一维向量,但是我想使用二维向量来存储项目名称。

我尝试过使用以下内容,但这意味着我没有成员函数(例如 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 回答