关于一些无法被代替的宏定义函数
来源:互联网 发布:h3c交换机端口聚合 编辑:程序博客网 时间:2024/04/29 04:08
在cocos2d有一个宏定义函数:CREATE_FUNC(func)
该宏做能放到类中使用,作用就是生成一个 返回一个该类指针的函数。
但因为 宏定义函数 有很多限制和危险性,所以我曾想用 继承模板类的方法代替这种宏定义函数:
template<typename T>
class CREATE_FUNC{
static T* create()
{
...
}
};
使用方法
class T: public CREATE_FUNC<T>{
};
一开始我以为很完美,实践出真理,我发现这种写法很坑爹,因为如果当某个类继承了该模板实现类,然后它的继承类也继承该模板实现类,问题就来了
,这时如果我们调用继承类的create 函数时,编译器就会不知道你调用的是 基类的 create还是 继承类的create,因为这2个create分别是继承自不同的CREATE_FUNC<T>
在不同的域所以也不会屏蔽基类的create, 如果继承类想要调用自己的create就必须 这样
InheritClass::CREATE_FUNC<InheritClass>::create()
相当的麻烦。
当然有一种比较简单的办法可以代替这种宏,那就是使用模板函数
template<typename T>
typename *T CREATE_FUNC()
{
...
}
在调用时必须声明 模板类型也不方便
但我们可以在每个类中 都定义一个该函数的特化
auto CREATE_FUNC_ = &CREATE_FUNC<T>(); //用函数指针 指向某函数的特化(没测试,只是一种认为可行的想法)
这样问题就解决了
- 关于一些无法被代替的宏定义函数
- 关于dll中导出函数的宏定义不可代替一则
- 关于inline---代替宏定义
- 宏定义不能代替函数模版
- 用宏定义代替printf函数
- C51用宏定义代替printf函数
- 关于宏定义的一些理解
- 关于GCD的一些宏定义
- 关于宏定义函数
- 关于C的预编译 宏定义 的一些使用
- 关于main函数的定义
- 关于编译为ko的一些宏定义
- linux内核中的一些关于中断的宏定义
- 关于iOS开发真机,模拟器的一些宏定义
- 关于宏定义的一些使用方法和注意点总结
- 内联函数和宏定义的一些破事
- 宏函数定义时需要注意的一些细节
- cocos2dx -一些相关的宏定义函数使用
- ckfinder.net完全讲解五(ckfinder按钮失效禁用)
- 人生的托儿所下次十二媳妇儿
- 《Maven实战》阅读笔记整理(一)
- 财险公司的出色不反对
- String 和StringBuffer,StringBuilder的区别
- 关于一些无法被代替的宏定义函数
- Qt 窗体布局
- UVA 11168 - Airport 凸包
- 思维方式之设计模式
- Webservice_23_SOAP的基于契约优先开发用户管理_实现客户端
- CSS position
- 数据结构之堆
- 成员在类中的偏移量 & 类成员指针
- Button事件的处理方式