Сущность имеет член var типа std :: array. Студент наследует от Entity и должен инициализировать член std :: array var, который он унаследовал. Ниже приведен код, который я использую для этого, но он включает приведение списка в скобках в std :: array. Я не уверен, что это правильный или оптимальный способ сделать это. Использование списка в скобках или в двойных скобках без приведения приводит к ошибкам компиляции. Я пробовал несколько других способов инициализации члена std :: array var безуспешно, поэтому я, похоже, застрял с моим текущим методом. Есть ли лучший способ сделать это?:
template<typename... Args> struct Entity {
typedef const char* name_t;
typedef const array<const char*, sizeof...(Args)> source_names_t;
const tuple<Args...> data;
name_t name;
//This will be initialized by derived class Student.
source_names_t source_names;
Entity(
name_t tmp_name
, source_names_t tmp_source_names
)
: name(tmp_name)
, source_names(tmp_source_names)
{}
};
//idnum, fname, lname, married
struct Student : Entity<int, string, string, bool> {
Student()
: Student::Entity(
"student"
//Now Student initializes the array, but does it by casting.
, (source_names_t) {{"id", "lname", "fname", "married"}}
)
{}
};