Puntero a miembro de la clase como parámetro de plantilla

Es posible que no-tipo de parámetro de plantilla que en realidad es un puntero a un miembro de la clase? Lo que estoy tratando de hacer es algo como lo siguiente:

struct Person {
  Dog dog;
};

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

typedef Strange<&Person::dog> weird;

Mi trabajo hasta ahora me lleva a creer que nada de eso es posible, pero tengo curiosidad si alguien puede decir lo contrario.

1 Kommentar

  1. 42

    De la norma:

    Un no-tipo de plantilla-parámetro tendrá uno de los siguientes (opcionalmente cv-calificado) tipos:

    • integral o tipo de enumeración,
    • puntero a objeto o un puntero a función,
    • referencia al objeto o referencia a la función,
    • puntero a miembro.

    Por lo que está permitido, y parece que funciona, en g++ como este:

    template <Dog Person::*ptr>
    struct Strange { ... };
    • Gracias! Yo aún puede generalizar esta como template <class A, class B, A B::*member>, que es útil para mí. Supongo que debería haber leído que la sección de la norma un poco más cerca.
    • Hay alguna forma de que los dos primeros argumentos a y B podrían quedar fuera?
    • Véase la propuesta N3601. a través de stackoverflow.com/questions/15148749/…
    • cualquier forma de pasar de un método de clase?
    • No hay ninguna cosa tal como método en C++. tipo de puntero a función incluye funciones miembro.
    • Como yo lo entiendo , es disponible en c++ a partir de la primera plantilla de la apariencia.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea