c++ 模板的困惑

天王盖地虎626 发布于 09/23 07:56
阅读 498
收藏 0

见下面的代码,红色部分的代码,我困惑的是LightRefBase<LightClass> 这个<>里面的LightClass,如果是其他已经事先定义的类,我也能接受,但是为什么是LightClass呢?而且<>中的LightClass似乎也没有用到,难以理解,请求大神解释下,谢谢。

 

#include <stdio.h>
#include <utils/RefBase.h>
 
using namespace android;
 
class LightClass : public LightRefBase<LightClass>
{
public:
        LightClass()
        {
                printf("Construct LightClass Object.");
        }
 
        virtual ~LightClass()
        {
                printf("Destory LightClass Object.");
        }
};
 
int main(int argc, char** argv)
{
        LightClass* pLightClass = new LightClass();
        sp<LightClass> lpOut = pLightClass;
 
        printf("Light Ref Count: %d.\n", pLightClass->getStrongCount());
 
        {
                sp<LightClass> lpInner = lpOut;
 
                printf("Light Ref Count: %d.\n", pLightClass->getStrongCount());
        }
 
        printf("Light Ref Count: %d.\n", pLightClass->getStrongCount());
 
        return 0;
}

加载中
0
田晓阳
田晓阳

你把它理解成一种强类型的宏()

它相当于把多态调用给静态链接了,算是C++的一个常用技巧,目的是让父类能知道子类()

田晓阳
田晓阳
顺便这玩意在C++里有个专有名词,叫做奇异递归模板模式(curiously recurring template pattern,CRTP)
田晓阳
田晓阳
或者说,它等于是先给每个子类创建一个专用的父类,再去继承这个父类。同一模板创建出来的父类,除了它们都源自同一模板以外,在类型系统中并没有任何其他关系。但是在类型计算的时候就很有用了。
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部