2015-08-02 23 views
7

Sau khi thấy mẫu có thể được chuyên môn hóa một phần cho kiểu tham chiếu hoặc kiểu con trỏ, tôi đã tự hỏi liệu mình có thể viết mẫu chấp nhận chỉ kiểu con trỏ để bắt đầu không. Đây là nỗ lực của tôi:Mẫu chỉ chấp nhận đối số kiểu con trỏ

template <typename T*> 
struct MyTemplate{}; 

int main() { 
    MyTemplate<int *> c; 
    (void)c; 
    return 0; 
} 

Điều này không biên dịch. Làm thế nào nó nên được sửa đổi? (Ví dụ: nếu những gì tôi đang cố gắng để hoàn thành là lúc tất cả có thể)

+0

Kiểm tra [ 'std :: is_pointer'] (http://en.cppreference.com/w/cpp/types). –

Trả lời

12

Bạn có thể sử dụng đặc tả từng phần:

template <typename T> struct MyTemplate; // Declaration 

template <typename T> struct MyTemplate<T*> // Specialization 
{ 
}; 

hoặc sử dụng static_assert

template <typename T> struct MyTemplate 
{ 
    static_assert(std::is_pointer<T>::value, "Expected a pointer"); 

    // T = value_type* 
    using value_type = std::remove_pointer_t<T>; 
}; 
Các vấn đề liên quan