2016-12-07 16 views
8

Tôi muốn thuyết minh một lớp nhưC++ mở rộng gói tham số để tuple của mảng

template<typename ...Args> 
class X { 
private: 
    std::tuple<std::array<Arg0, 255>, std::array<Arg1, 255>, ...> m_tuples; // For Arg in Args 
} 

Tôi biết điều này là không đúng C++, nhưng làm thế nào tôi có thể đạt được hiệu quả của việc mở rộng mẫu gói tham số của lớp cho các mảng được giữ trong tuple?

Trả lời

10
template<typename ...Args> 
class X { 
private: 
    std::tuple<std::array<Args, 255>...> m_tuples; // For Arg in Args 
}; 

... bạn không mong đợi để được như vậy gần, bạn đã :)

+0

tôi không! Bạn có thể giải thích cách mở rộng này hoạt động không? Tôi đang mắc kẹt suy nghĩ về điều này như tôi sẽ đệ quy các cuộc gọi chức năng, popping ra các yếu tố đầu tiên của gói tham số. – shane

+0

@shane Các quy tắc hơi mờ đối với tôi, nhưng trong quá trình mở rộng gói ngắn hoạt động bằng cách sao chép mẫu (cú pháp) và thay thế các gói đối số trong mẫu này. Ở đây, pattern là toàn bộ 'std :: array ', được mở rộng tới những gì bạn đang làm sau bằng cách thay thế 'Args'. – Quentin

+2

@shane Xem http://stackoverflow.com/questions/17652412/what-are-the-rules-for-the-token-in-the-context-of-variadic-templates. –

Các vấn đề liên quan