Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 一种函数指针,指向一个函数,该函数将模板类的一个对象作为模板参数。可能的_C++_Templates_Function Pointers_Typedef - Fatal编程技术网

C++ 一种函数指针,指向一个函数,该函数将模板类的一个对象作为模板参数。可能的

C++ 一种函数指针,指向一个函数,该函数将模板类的一个对象作为模板参数。可能的,c++,templates,function-pointers,typedef,C++,Templates,Function Pointers,Typedef,x_uux 我想这样做: typedef long (* fp)(BaseWindow< fp > & wnd, HWND hwnd, long wparam, long lparam); 但我得到一个编译错误: 错误C2065:“fp”:未声明 标识符 是否可以以某种方式实现此功能?不可以,因为模板参数的类型将包括其自身。这将导致类型中的无限递归 如果不是类模板专门化,而是接受它的基类,这是非常可能的 struct TemplateBase { }; typedef

x_uux

我想这样做:

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, ...);
}

您想对此做什么?

从本页的“相关链接”部分:

请粘贴编译器报告错误的行。woops。指针名为fp\u t,但它在打印时没有出现在文章的预览中,因此我将其更改为仅fp,但忘记修改错误消息。这是我面临的一个问题的疯狂想法。但也许有更好的方法。在这里作为评论来解释这个问题太长了,所以也许我稍后会提出一个正式的问题。感谢您的回答。请注意,您可以将虚拟函数添加到基类中,并且从sampleFunc中调用它们将控制派生类,就像在非模板类中使用虚拟函数一样。