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