Um ponteiro de função que aponta para uma função que leva um objeto de uma classe de modelo com o dito apontador de função como argumento de modelo. Possível?
-
23-08-2019 - |
Pergunta
x__x
Eu quero fazer algo parecido com isto:
typedef long (* fp)(BaseWindow< fp > & wnd, HWND hwnd, long wparam, long lparam);
Mas eu recebo um erro de compilação:
Erro C2065: 'fp': não declarado identificador
É possível implementar isso de alguma forma?
Solução
Não, não é, porque o tipo do parâmetro do modelo incluiria si. Isto deu a uma recursividade infinita no tipo.
Se em vez da especialização de modelo de classe, você aceitar uma base de classe dele, isso é muito possível
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, ...);
}
O que você quer fazer com isso?
Outras dicas
Na seção links relacionados nesta mesma página: como posso typedef um ponteiro de função que leva uma função de seu próprio tipo como um argumento?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow