справочная таблица без структуры под - PullRequest
2 голосов
/ 30 декабря 2011
У

был вопрос из двух частей относительно нижеприведенного фрагмента кода C ++:

 namespace {

  struct FieldRecord {

     string item_to_fieldname;
     bool is_queriable;
   };

   const FieldRecord g_LookUpTable [] = {

       {"employee_name", true},
       { "ssn_no", false},
        //etc 
   };

 }

1) если я хотел реализовать таблицу поиска структуры, которая не является -под, это следующий подход в стиле Cподвержен ошибкам или необходимо сделать структуру FieldRecord модулем, т. е. заменить строку на const char * etc

2) как структура FieldRecord для массива в приведенной выше структуре инициализируется из списка инициализации, так как у меня естьтолько конструктор по умолчанию.

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Ваш код работает просто отлично. Инициализация выполняется как обычно для структур: каждый элемент данных каждого элемента создается из соответствующего аргумента, и вполне допустимо построить string из char*.

1 голос
/ 30 декабря 2011

Ваша FieldRecord не является POD. Это совокупность, однако. Чтобы использовать прямую инициализацию, достаточно иметь агрегат. Если ваш тип становится неагрегированным, вам нужно использовать конструктор. Для агрегатов вы можете просто перечислить значения, которые должны получить соответствующие члены, и они будут инициализированы напрямую, возможно, с использованием преобразований для элементов.

Тогда возникает вопрос: что такое совокупность? Ну, это любой класс, который не имеет ни конструкторов, ни деструктора, ни закрытых или защищенных нестатических членов-данных, ни базовых классов, ни виртуальных функций. Если вам нужно что-то из этого, вам нужно дать вашему типу конструктор и создать его оттуда. Это немного более повторяющееся, но вы все равно можете заполнить массив этими объектами. Например:

std::pair<std::string, bool> const table[] = {
    std::pair<std::string, bool>("employee_name", true),
    std::pair<std::string, bool>("ssn_no", false)
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...