實體具有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