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?
-
23-08-2019 - |
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?
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
En la sección de enlaces relacionados en esta misma página: ¿Cómo puedo typedef un puntero de función que tiene una función de su propio tipo como argumento?
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow