Puntatore a membro della classe come parametro di modello

È possibile avere camere non-tipo di parametro del modello, che è in realtà un puntatore a un membro della classe? Quello che sto cercando di fare è qualcosa di simile al seguente:

struct Person {
  Dog dog;
};

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

typedef Strange<&Person::dog> weird;

Il mio lavoro mi porta a credere che nulla del genere è possibile, ma io sono curioso di sapere se qualcuno ha grado di dire il contrario.



One Reply
  1. 42

    Standard:

    Un non-modello del tipo di parametro deve avere uno dei seguenti (opzionalmente cv qualificato) tipi:

    • integrale o tipo di enumerazione,
    • puntatore all’oggetto o di un puntatore a funzione,
    • un riferimento a un oggetto o un riferimento a funzione,
    • puntatore a membro.

    Pertanto è consentito, e sembra funzionare su g++ come questo:

    template <Dog Person::*ptr>
    struct Strange { ... };
    • Grazie! Posso generalizzare ulteriormente questo come template <class A, class B, A B::*member>, che è utile per me. Suppongo che avrei dovuto leggere il capitolo degli standard un po ‘ più da vicino.
    • C’è un modo che i primi due parametri A e B potrebbe essere lasciato fuori?
    • Si veda la proposta N3601. via stackoverflow.com/questions/15148749/…
    • qualsiasi modo per passare a un metodo di una classe?
    • Non c’è cosa separata come metodo in C++. tipo di puntatore a funzione che include le funzioni membro.
    • A quanto ho capito , è disponibile in c++ dal primo modello di aspetto.

Lascia un commento