Tôi muốn biết nếu có thể lọc các loại được chuyển đến mẫu variadic (dựa trên mẫu biến vị ngữ) để tạo một mẫu variadic khác chứa các kiểu thỏa mãn vị từ:Lọc các loại gói tham số
/** Filter a parameter pack */
template <template <class> class,
template <class...> class,
class...>
struct filter;
template <template <class> class Pred, template <class...> class Variadic>
struct filter<Pred, Variadic> : Variadic<>
{};
template <template <class> class Pred,
template <class...> class Variadic,
class T, class... Ts>
struct filter<Pred, Variadic, T, Ts...>
{
// FIXME: this just stops at first T where Pred<T> is true
using type = typename std::conditional<
Pred<T>::value,
Variadic<T, Ts...>, // can't do: Variadic<T, filter<...>>
filter<Pred, Variadic, Ts...> >::type;
};
Như bạn có thể thấy, tôi chưa tìm thấy cách "trích xuất" gói tham số từ phần còn lại của các loại được lọc.
Cảm ơn trước!
Có điều tôi vẫn chưa hiểu, nhưng lỗi trình biên dịch không giúp ích gì. Tôi đã đăng ở đây http://ideone.com/USTnJR, nếu bạn không bận tâm đến việc xem xét khác - nó có vẻ không thích hợp để chỉnh sửa bản gốc. – scry
Phiên bản đó có vấn đề khác, sử dụng phiên bản này: http://ideone.com/eh3Epd. Như bạn có thể thấy, các loại thành viên của bộ lọc và Nhược điểm không được công nhận là loại. – scry
@roysc: 'Cons' phải chuyên về bộ dữ liệu. Hãy để tôi chỉnh sửa. [Edit:] Xong. Tôi cũng đã sửa đổi các mẫu chính để có một trường hợp cơ sở thích hợp. –