2010-11-25 8 views
1

프로그램에서 사용해야하는 모든 KeyPair가있는 파일을 만들고 싶습니다. 그러나 코드에 임베드하는 것이 더 좋을 것이라고 생각 했으므로 대신 구조체에 넣고 싶습니다. 예를 들어,이 항목을 구조체에 명시 적으로 넣으려면 어떻게해야합니까?명시 적으로 항목을 구조체에 저장합니다.

{Qt::Key_0, "Win1"}, 
{Qt::Key_1, "Win2"}, 
{Qt::Key_2, "Win3"}, 
{Qt::Key_3, "Win4"}, 
{Qt::Key_4, "Win5"}, 
{Qt::Key_5, "Win6"}, 
{Qt::Key_6, "Win1"}, 
{Qt::Key_7, "Win7"}, 
{Qt::Key_8, "Win3"}, 
{Qt::Key_9, "Win5"} 

는 어떻게도이 항목에 액세스합니까?

답변

5

그냥 구조체를 선언하고 초기화 :

const struct 
{ 
    Qt::Key mKey; 
    const char* mKeyName; 
} key_names[] = { 
{Qt::Key_0, "Win1"}, 
{Qt::Key_1, "Win2"}, 
{Qt::Key_2, "Win3"}, 
{Qt::Key_3, "Win4"}, 
{Qt::Key_4, "Win5"}, 
{Qt::Key_5, "Win6"}, 
{Qt::Key_6, "Win1"}, 
{Qt::Key_7, "Win7"}, 
{Qt::Key_8, "Win3"}, 
{Qt::Key_9, "Win5"} 
}; 

를 자, 내가 값에 Qt::Key_0 등이 사용 주어진 합리적인 것 같다 유형 Key enumeration의 값 것으로 가정했습니다. struct 유형 자체를 어딘가에서 참조해야하는 경우 struct 태그 (= C++의 클래스 이름)도 지정해야합니다. 간결함을 위해 생략했습니다.

액세스는 다른 배열과 같다 :

for(size_t i = 0; i < sizeof key_names/sizeof *key_names; i++) 
{ 
    printf("the key value %u is mapped to the name '%s'\n", 
     (unsigned int) key_names[i].mKey, 
     key_names[i].mKeyName); 
} 
+0

어떻게 이러한 항목에 액세스합니까? – Owen

+0

많은 도움이 될지 모르겠지만이 배열이 함수 범위에서 사용된다면 '정적'으로 만드는 것이 유익 할 것입니다. –

+2

@Owen : 다른 배열처럼. –

0

당신은 (거의) 배열 이니셜 라이저로 코드의 덩어리를 사용할 수 있습니다.

2

흠 ...

옵션 1 :

struct myPair 
{ 
    Qt::Key k; 
    QString s; 
}; 

myPair mykeys[] = {{Qt::Key1, "Hello"}, {Qt::Key2, "Blah"}, etc}; 

옵션 2 :

#include <boost/assign.hpp> 
#include <map> 
using namespace boost::assign 

std::map<Qt::Key, Qstring> myMap; 

int main() 
{ 
    myMap += (key1, val1)(key2, val2)(etc); 
} 

옵션 3 :

원하는 데이터 구조 (표준 : map)를 투표하고 일부 Init() 함수에 수동으로 항목을 삽입하십시오.

관련 문제