Tôi đang thử nghiệm với các mẫu variadic và muốn biết nếu họ có thể được sử dụng để generalze (?) Lớp mẫu nhưInitialzing và các thành viên truy cập của một lớp mẫu variadic
template<typename T1, typename T2 , typename T4, typename T4>
struct Foo
{
T1 &m_member1;
T2 &m_member2;
T3 &m_member3;
T4 &m_member4;
};
Ngoài ra, tôi muốn có thể khởi tạo tất cả các thành viên bằng cách kết nối các nhà xây dựng. Đây là cách nay tôi đã nhận:
template<typename... Types>
struct Foo;
template<typename T , typename... Types>
struct Foo<T, Types ...> : public Foo<Types ...>
{
Foo(T member , Types ... others) : m_member(member) , Foo<Types ...>(others)
{
}
T m_member;
};
template<typename T>
struct Foo<T>
{
Foo(T member) : m_member(member)
{
}
T m_member;
};
đâu mục tiêu là để tạo các đối tượng như sau:
Foo<char,int,bool,float> f('a' , 42 , true , 1.234);
Mã này thất bại trong việc biên dịch (gcc 4.5.3) với các lỗi:
TestVariadicTemplates.cpp: In constructor ‘Foo<T, Types ...>::Foo(T, Types ...)’:
TestVariadicTemplates.cpp:15:83: error: parameter packs not expanded with ‘...’:
TestVariadicTemplates.cpp:15:83: note: ‘others’
TestVariadicTemplates.cpp:15: confused by earlier errors, bailing out
Sửa
Điều gì sẽ là cách tốt nhất để tái ference các thành viên khác nhau của Foo
?
Bạn đang tìm kiếm cho 'std :: tuple'? – pmr
@pmr Cảm ơn. std :: tuple làm một công việc tuyệt vời. C++ x11 thật tuyệt vời !!! – Olumide