在模板类成员函数入参中使用回调函数指针
来源:互联网 发布:umeng移动端数据统计 编辑:程序博客网 时间:2024/05/22 15:24
在一个普通类中, 成员函数使用了一个回调函数指针作为入参.
将普通类改成模板类后, 编译不过. 后来才明白, 原来应该将typedef声明在类内部.
原始普通类
/// 前向声明class CAvlNode;class CAvl;typedef bool (*PFN_CALLBACK_TRAVERSETREE_TREE)(CAvl* pTree, const CAvlNode*& pNodeOpt);
class CAvl {public: CAvl() : m_pRoot(NULL), m_nNodeCounter(0) {} virtual ~CAvl() {free(m_pRoot);} /// ... /// 用非递归实现遍历, 由回调操作遍历到的节点 void TraverseDLR(CAvlNode* pTreeNode, PFN_CALLBACK_TRAVERSETREE_TREE pfnCb); ///< 前序 void TraverseLDR(CAvlNode* pTreeNode, PFN_CALLBACK_TRAVERSETREE_TREE pfnCb); ///< 中序 void TraverseLRD(CAvlNode* pTreeNode, PFN_CALLBACK_TRAVERSETREE_TREE pfnCb); ///< 后序};
编译过的模板类
template<class T>class CAvl {public: CAvl() : m_pRoot(NULL), m_nNodeCounter(0) {} virtual ~CAvl() {free(m_pRoot);} /// ... /// 回调函数需要的声明, 必须在类模板内部定义 typedef bool (*PFN_CALLBACK_TRAVERSETREE_TREE)(CAvl<T>* pTree, const CAvlNode<T>*& pNodeOpt); /// 用非递归实现遍历, 由回调操作遍历到的节点 void TraverseDLR(CAvlNode<T>* pTreeNode, PFN_CALLBACK_TRAVERSETREE_TREE pfnCb); ///< 前序 void TraverseLDR(CAvlNode<T>* pTreeNode, PFN_CALLBACK_TRAVERSETREE_TREE pfnCb); ///< 中序 void TraverseLRD(CAvlNode<T>* pTreeNode, PFN_CALLBACK_TRAVERSETREE_TREE pfnCb); ///< 后序 void free(CAvlNode<T>* pTreeNode); ///< 释放资源private: CAvlNode<T>* m_pRoot; size_t m_nNodeCounter; ///< 树结点计数器, 代表树节点总数};
0 0
- 在模板类成员函数入参中使用回调函数指针
- 成员函数指针与回调函数
- 在C++的类中使用类成员函数作为回调函数
- 使用C++类成员函数作为回调函数
- 函数指针的使用--回调函数
- 类成员函数作为回调函数
- 类成员函数作为回调函数
- 成员函数 回调函数
- 回调函数的使用封装(支持全局函数,类静态函数,类成员函数)
- 回调函数 函数指针
- 函数指针回调函数
- 函数指针回调函数
- 函数指针 回调函数
- 回调函数,函数指针
- Day16(上).函数指针//socket动态库回调函数开发//泛型编程//类模板
- 指针函数 、函数指针 、 回调函数
- 指针函数、函数指针、回调函数
- 在托管VC++中使用函数指针进行回调(实现回调函数功能)
- myeclipse8.5破解
- 微信XML解析
- KVO Considered Harmful
- shell脚本中单引号和双引号的区别
- apache下配置多域名。
- 在模板类成员函数入参中使用回调函数指针
- [leetcode] 16. 3Sum Closest
- ibaits 中 $ 与 # 及 remapResults的用法
- oracle 动静态参数
- RxJava开发精要1-从.NET到RxJava
- 学习中
- linux常用命令——文件传输(三)
- Yii2下路由设定
- JS 继承与重写