Un puntero de función que apunta a una función que toma un objeto de una clase de plantilla con dicho puntero de función como argumento de plantilla.¿Posible?

StackOverflow https://stackoverflow.com/questions/1082552

Pregunta

x__x

Quiero hacer algo como esto:

typedef long (* fp)(BaseWindow< fp > & wnd, HWND hwnd, long wparam, long lparam);

Pero me sale un error de compilación:

error C2065:'fp':identificador no declarado

¿Es posible implementar esto de alguna manera?

¿Fue útil?

Solución

No, no lo es, porque el tipo del parámetro de plantilla incluiría en sí. Esto produciría a una recursión sin fin en el tipo.

Si en lugar de la especialización de plantilla de clase, acepta una clase base de la misma, eso es muy posible

struct TemplateBase {

};

typedef long (*fpType)(TemplateBase&, HWND, long, long);

template<fpType FP>
struct BaseWindow : TemplateBase {

};


long sampleFunc(TemplateBase &b, HWND hwnd, long wparam, long lparam) {
  ...
}

int main() {
    BaseWindow<sampleFunc> bw;
    sampleFunc(bw, ...);
}

¿Qué quieres hacer con esto?

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top