实体具有std :: array类型的成员变量。学生从实体继承,并且需要初始化它继承的std :: array成员变量。下面是我用来做到这一点的代码,但它涉及将一个大括号括起来的列表转换为std :: array。我不确定这是做到这一点的正确或最佳方式。在没有转换的情况下使用大括号括号或双大括号括起来的列表会导致编译错误。我尝试了几种其他的方式来初始化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"}}
)
{}
};
作为一个风格的笔记,我不认为'decltype'是一些有名的'typedef'的好替代品。 – 2010-09-03 19:17:26
我看到我可以使用typedef作为名称成员,但我是否也可以为source_names做到这一点?感谢您的建议。总是可以使用更多提示。 – 2010-09-03 19:20:00
'typedef array source_names_type;' –
2010-09-03 19:22:30