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?

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

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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top