явно хранить элементы в структуре - PullRequest
1 голос
/ 25 ноября 2010

Я хотел создать файл, в котором есть все пары ключей, которые мне нужны в программе.Однако я подумал, что было бы лучше встроить его в код, поэтому вместо этого я хочу поместить его в структуру.Например, как мне явно поместить эти элементы в структуру?

 {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"}

как мне также получить доступ к этим элементам?

Ответы [ 3 ]

5 голосов
/ 25 ноября 2010

Просто объявите структуру и инициализируйте ее:

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 и т. Д. Являются значениями типа Перечисление ключей ,что кажется разумным, учитывая ваше использование.Если вам нужно где-то обратиться к самому типу структуры, вам также нужно присвоить ему тег структуры (= имя класса в 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);
}
2 голосов
/ 25 ноября 2010

Хмм ...

опция 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:

Просто возьмите любую структуру данных, которую вы хотите (я голосую за стандартную карту)и вручную вставьте записи в некоторую функцию Init ().

0 голосов
/ 25 ноября 2010

Вы можете (почти) использовать этот кусок кода как инициализатор массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...