2011-07-30 36 views
18

Czy możliwe jest posiadanie parametru szablonu bez typu, który jest właściwie wskaźnikiem do elementu klasy? Czego szukam zrobić coś jak poniżej:Wskaźnik do elementu klasy jako parametr szablonu

struct Person { 
    Dog dog; 
}; 

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

typedef Strange<&Person::dog> weird; 

Moja praca do tej pory prowadzi mnie do przekonania, że ​​nic takiego nie jest możliwe, ale jestem ciekaw czy ktoś może powiedzieć inaczej.

Odpowiedz

26

od normy:

Non typu szablonu czynników posiada jeden z następujących (ewentualnie CV Quali ed fi) rodzaje:

  • integralną lub wyliczania typu
  • wskaźnik do obiektu lub wskaźnika do funkcji, odniesienie do obiektu lub odniesienie do funkcji,
  • ,
  • wskaźnik do członka.

Więc to jest dozwolone, i wydaje się działać na g++ tak:

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

Dzięki! Mogę dalej generalizować to jako 'szablon ', co jest dla mnie użyteczne. Przypuszczam, że powinienem był nieco bliżej zapoznać się z tą częścią normy. –

+2

Czy jest jakiś sposób, aby pominąć dwa pierwsze argumenty A i B? – user1158559

+1

@ user1158559 Zobacz propozycję N3601. przez http://stackoverflow.com/questions/15148749/pointer-to-class-member-as-a-template-parameter –

Powiązane problemy