2013-06-07 30 views
6

Nửa giờ trước, tôi phát hiện ra các tham số mẫu variadic và bây giờ tôi hoàn toàn nối.C + + varadic mẫu chấm dứt lớp

Tôi có lớp trừu tượng dựa trên lớp trừu tượng cho chốt đầu ra vi điều khiển. Tôi muốn nhóm một số chân đầu ra để tôi có thể xử lý chúng như một pin. Đoạn code dưới đây làm việc, nhưng tôi nghĩ rằng tôi sẽ có thể chấm dứt đệ quy trên 0 thông số thay vì trên 1.

template< typename pin, typename... tail_args > 
class tee { 
public: 

    typedef tee<tail_args...> tail; 

    static void set(bool b){ 
     pin::set(b); 
     tail::set(b); 
    } 

}; 

template< typename pin > 
class tee<pin> { 
public: 

    static void set(bool b){ 
     pin::set(b); 
    } 

}; 

Tôi cố gắng này nhưng trình biên dịch (gcc) dường như không phải đưa nó vào tài khoản:

template<> 
class tee<> : public pin_output { 
public: 

    static void set(bool b){} 

}; 

Thông báo lỗi dài nhưng về bản chất nó không có chữ số tee <>. Có điều gì sai trái với tee tôi <> hay không là nó có thể kết thúc đệ quy

+0

Phiên bản nào của GCC bạn đang sử dụng? Có phải GCC 4.8 và bạn đã vượt qua cờ '-std = C++ 11' (cũng với' -Wall')? –

+0

Loại của bạn phải là 'template class tee', và trường hợp chấm dứt của bạn phải là' template <> class tee <> {}; '. –

+0

@Basile: 4.7.2; Tôi đã sử dụng -std = C++ 0x; sử dụng -std = C++ 11 -Wall không thay đổi; –

Trả lời

6

trường hợp chung nhất của bạn phải mất ít nhất 1 luận (pin), do đó bạn không thể tạo một chuyên môn hóa, có 0 đối số.

Thay vào đó, bạn nên làm cho trường hợp tổng quát nhất, chấp nhận bất kỳ lượng đối số:

template<typename...> class tee; 

Và sau đó tạo các chuyên ngành:

template< typename pin, typename... tail_args > 
class tee<pin, tail_args...> { 
public: 

    typedef tee<tail_args...> tail; 

    static void set(bool b){ 
     pin::set(b); 
     tail::set(b); 
    } 

}; 

template<> 
class tee<> { 
public: 

    static void set(bool b){} 

}; 
+0

Fantastic, hoạt động như một sự quyến rũ, và tôi là một bước nhỏ trên con đường của tôi lên :) –

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