Tôi cần khai báo một lớp có thể lưu trữ các loại vùng chứa khác nhau. tức là nó sẽ tốt đẹp nếu nó có thể xử lý std :: bitset và std :: array. Tuy nhiên, hai lớp này cần một đối số mẫu khác nhau ... Có thể (và có thể, cách) sử dụng các lớp mẫu templated và các mẫu variadic để khai báo loại lớp này?Khai báo đối tượng "vùng chứa" từ lớp mẫu templated và các mẫu variadic
Ví dụ (nhưng sai):
template<template <typename..., std::size_t> class Container,
std::size_t N,
typename... Args>
class Base_Class
{
...
Container<Args..., N/2> container;
};
Trình biên dịch phàn nàn rằng N/2 không phải là một loại. Rõ ràng, cho cả hai std :: mảng và std :: bitset tôi cần kích thước để được tham số mẫu cuối cùng ... Có thể mã này điên rồ?
Cảm ơn bạn!
EDIT: Theo như tôi lo ngại, vấn đề chính là các mẫu variadic chỉ có thể được mở rộng ở bên phải, do đó tham số variadic phải là cuối cùng. Bất cứ ai biết nếu có bất kỳ kế hoạch để cho phép cú pháp sau trong C + + 17?
template<typename... Args, typename T>
struct A
{};
mà trình biên dịch ? – Walter
Nó cho lỗi với cả g ++ và clang (rõ ràng với tham số -std = C++ 11/14) – dodomorandi