2012-10-20 5 views
2

나는 현재 무작위로 아이템 (예 : 무기, 갑옷 등)을 생성하는 프로그램을 만들고 있으며, 전역 상수 벡터를 만들고 싶습니다. 항목. 이 2D 벡터를 다른 모든 클래스에서 사용할 수있는 헤더 파일에 저장하려고합니다 (수정할 수는 없으므로). 선언시 초기화해야합니다. 그러나 나는 항목 이름을 저장하는 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])); 

이것은 1 차원 벡터 근무 :

나는 이전에 다음과 같은 사용.

난 다음 그러나 그것은 내가 (크기와 같은()) 멤버 함수가 없다는 뜻 사용하여 시도했다 : 나는 또한 모두를 저장하는 클래스를 사용하지 않으

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 }; 

을 이름을 사용할 때마다 모든 이름을 저장하는 변수를 만드는 것이 비효율적이라고 생각하기 때문입니다.

아무도 내 문제를 해결할 수있는 방법을 알고 있습니까?

답변

0

이 C + +를, 그래서이 작업을 수행하는 가장 일반적인 방법은 생성자에서이 작업을 수행하는 클래스를 작성하고 해당 클래스의 const를 개체를 만드는 것입니다. 그런 다음 클래스는 유지 관리하는 다양한 항목을 쿼리하는 다양한 멤버 함수를 제공합니다.

보너스로 나머지 코드에서 다양한 항목을보다 쉽게 ​​사용할 수 있습니다.

1

회원은 const static 인 수업을 사용할 수 있습니다. 이 방법으로 클래스는 네임 스페이스처럼 동작 할뿐 아니라 이름을 사용하기 위해 네임 스페이스 클래스의 인스턴스를 만들지 않아도됩니다.

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

string s = MyNames::myweapon; // s = "Katana"