2011-07-30 28 views
18

Có thể có thông số mẫu không phải là loại thực sự là con trỏ tới thành viên của lớp không? Những gì tôi đang muốn làm là một cái gì đó như sau:Con trỏ tới thành viên của lớp làm tham số mẫu

struct Person { 
    Dog dog; 
}; 

template <?? ptr> 
struct Strange { 
    // ... 
}; 

typedef Strange<&Person::dog> weird; 

Công việc của tôi cho đến nay khiến tôi tin rằng không có gì có thể, nhưng tôi tò mò nếu có ai có thể nói khác.

Trả lời

26

Từ tiêu chuẩn:

Một phi kiểu mẫu tham số phải có một trong các (tùy chọn cv-quali fi ed) loại sau đây:

  • không thể thiếu hoặc liệt kê loại,
  • con trỏ đối tượng hoặc con trỏ để hoạt động,
  • tham chiếu đến đối tượng hoặc tham chiếu đến hàm,
  • con trỏ đến thành viên.

Vì vậy, nó được cho phép, và dường như làm việc trên g++ như thế này:

template <Dog Person::*ptr> 
struct Strange { ... }; 
+9

Cảm ơn! Tôi có thể khái quát hóa nó thành 'template ', điều này rất hữu ích cho tôi. Tôi cho rằng tôi nên đọc phần đó của tiêu chuẩn gần hơn một chút. –

+2

Có cách nào mà hai đối số đầu tiên A và B có thể bị bỏ sót không? – user1158559

+1

@ user1158559 Xem đề xuất N3601. qua http://stackoverflow.com/questions/15148749/pointer-to-class-member-as-a-template-parameter –

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