У объекта есть член var типа std :: array. Студент наследует от Entity, и ему нужно будет инициализировать элемент std :: array, который он унаследовал. Ниже приведен код, который я использую для этого, но он включает в себя вставку списка в скобках в std :: array. Я не уверен, что это правильный или оптимальный способ сделать это. Использование списка, заключенного в фигурные скобки или в виде двойной скобки без результатов приведения в ошибки компиляции. Я пробовал несколько других способов инициализации элемента std :: array var без успеха, поэтому, похоже, я придерживаюсь своего текущего метода. Есть ли лучший способ сделать это ?:Лучший способ инициализировать наследуемый элемент класса var типа std :: array?
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"}}
)
{}
};
Как стилистическая нота, я не думаю, что 'decltype' является хорошей заменой для некоторых хорошо названных' typedef'. –
Я вижу, где я мог бы использовать typedef для имени, но мог ли я сделать это для source_names? Спасибо за предложение, кстати. Всегда можно использовать больше советов. –
'typedef array source_names_type;' –