2010-11-25 13 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タグ(= 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

私は多くの助けになるかどうかはわかりませんが、この配列が関数スコープで使用されていれば、それを 'static'にすると有益でしょう。 –

+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:

(私はstd :: mapに投票しています)任意のデータ構造を取って、いくつかのInit()関数に手動でエントリを挿入してください。

関連する問題