x__x
Я хочу сделать что-то вроде этого:
typedef long (* fp)(BaseWindow< fp > & wnd, HWND hwnd, long wparam, long lparam);
Но я получаю ошибку компиляции:
ошибка C2065: 'fp': необъявленный идентификатор
Можно ли это как-то реализовать?
x__x
Я хочу сделать что-то вроде этого:
typedef long (* fp)(BaseWindow< fp > & wnd, HWND hwnd, long wparam, long lparam);
Но я получаю ошибку компиляции:
ошибка C2065: 'fp': необъявленный идентификатор
Можно ли это как-то реализовать?
Нет, потому что тип параметра шаблона будет включать сам себя. Это привело бы к бесконечной рекурсии в типе.
Если вместо специализации шаблона класса вы принимаете его базовый класс, это вполне возможно.
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, ...);
}
Что вы хотите с этим делать?
Из раздела связанных ссылок на этой самой странице: Как определить тип указателя на функцию, который принимает в качестве аргумента функцию своего собственного типа?