19
template <size_t size, typename ...Params> 
void doStuff(Params...) { 
} 

template <> 
void doStuff<size_t(1), int, bool>(int, bool) { 

} 

int main(int, char**) { 
    doStuff<1,int,bool>(1, false); 
    return 0; 
} 

Điều này không biên dịch, khai báo doStuff thứ hai cung cấp cho tôi error: template-id ‘doStuff<1u, int, bool>’ for ‘void doStuff(int, bool)’ does not match any template declaration nhưng nó khớp rõ ràng với khai báo đầu tiên với các đối số mẫu variadic.Chuyên môn về mẫu với các mẫu variadic

Làm thế nào để chuyên mẫu variadic?

Trả lời

12

Cú pháp là chính xác (afaik, và clang ++ chấp nhận nó), nhưng trình biên dịch của bạn có thể chưa được cập nhật.

Nếu bạn sử dụng gcc, hỗ trợ mẫu variadic của nó hoàn toàn không đầy đủ và thậm chí phiên bản svn gần đây chưa hỗ trợ chuyên môn (Đó là cách bạn sử dụng công nghệ cạnh chảy máu và gcc buồn bã chỉ thực hiện đề xuất mẫu variadic chưa hoàn chỉnh sớm và kể từ đó không bắt kịp nhiều, trong khi tiếng kêu bắt đầu khá muộn, nhưng đã khá hoàn chỉnh)

+0

Tôi sử dụng gcc 4.5.2. Cảm ơn câu trả lời của bạn (Tôi đang sử dụng quá tải mẫu thay vì bây giờ). – coyotte508

+0

tương tự với 4.6.1, tức là ở trên không được hỗ trợ trong phiên bản đó ... – Nim

+0

Hoặc bạn có thể bọc hàm trong một cấu trúc 'template <..> Do {static void Stuff (..) {}};'. –