最近看到一种比较诡异的代码,对单例函数还进行封装,定义在.h文件中.
inline classOuter::classInner* GetStaticInner()
{
return ((classOuter*)NULL)->Inner(); //返回的实际上还是classInner*类型
}
类的定义也在该.h文件中:
class classOuter
{
public:
class classInner
{
public:
classInner();
virtual ~classInner();
}
static classInner* Inner()
{
static classInner inner; //这里使用的是静态局部对象来做的单例.对象创建不能在Inner类中,所以在外边进行的.如果使用静态指针的话,可以定义在自己类中.
return &inner;
}
}
这样做的好处是,其他地方只需要包含该.h文件,然后使用GetStaticInner()就可以获得classInner*类型的单例. 不然需要在前面加上限定符:classOuter::Inner();
如果把单例Inner()定义在classInner中,采用静态指针的话来作为返回值的话(就像这篇文章介绍的那样:),使用GetStaticInner则有如下的情况:
inline classOuter::classInner* GetStaticInner()
{
return ((classOuter::classInner*)NULL)->Inner();
}
则可以省掉classOuter::classInner这么长的限定符了.