关于一些无法被代替的宏定义函数

在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>(); //用函数指针 指向某函数的特化(没测试,只是一种认为可行的想法)

这样问题就解决了





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值