Xin lỗi vì câu hỏi phức tạp, nhưng về cơ bản ý tưởng rất đơn giản. Tôi có mẫu lớp variadic:Có thể định nghĩa một mẫu lớp C++ 11 variadic có tham số thẻ tín hiệu Variadic phụ thuộc vào tham số mẫu nguyên không?
template<class P1, class P2, class ... P3s>
class A
{
...
};
Tôi muốn có trình tạo A-class lấy tham số mẫu nguyên N và khởi tạo lớp A có tham số N P3. Giống như:
template<class P1, class P2, class P3, int N>
class GenA : /* somehow */ : public A<P1, P2, /* N times */ P3, P3, ...>
{
...
};
Vì vậy, việc sử dụng sẽ là:
// Generates A<Class1, Class2, Class3, Class3, Class3>
GenA<Class1, Class2, Class3, 3> a;
Tôi đã cố gắng làm điều đó với thời gian đệ quy biên dịch và chuyên môn hóa một phần
template <class P1, class P2, int N, class P3>
class GenA : public GenA<P1, P2, N-1, P3, P3>
{
...
}
template <class P1, class P2, int N, class ... P3s>
class GenA<P1, P2, 0, P3s ...> : public A<P1, P2, P3s, ...>
{
...
}
tuy nhiên C++ 11 không công nhận mẫu thứ hai là một chuyên môn hóa của cái đầu tiên (bởi vì nó, trên thực tế, khác nhau) và không bao giờ đến trường hợp cơ bản của đệ quy (nó ngừng phàn nàn về quá nhiều đệ quy). Bất kỳ ý tưởng?
Cảm ơn
Tunnuz
Có vẻ khó làm mà không có chuyên môn về mẫu quá mức. –
Sau khi bạn đã chọn một trong các câu trả lời, bạn có thể cung cấp điểm chuẩn của các giải pháp không? – pmr