中国开发网: 论坛: 程序员情感CBD: 贴子 74764
furnace
鸡巴啊,终于有中文了,俺再描述一下把,这个类是我看一个开源代码的时候看到的!
鸡巴啊,终于有中文了,俺再描述一下把,这个类是我看一个开源代码的时候看到的!
我知道是个链表,从名字上也能看出来的,但是第一眼感觉是是用模板类实现设计模式里的singleton

仔细一看,发现这类非常有趣,编译是肯定能编译过去,但是怎么用它?,就算能create instance (创建实例),当你调用getObject这个函数的时候,也会出错。为什么,
看这里,它的构造函数。


template <class T, typename K> class objList
{
public:
static T* objFirst;
T* objNext;
K objKey;
objList(const K key)
{
objKey = key;
objNext = objFirst;
objFirst = (T *)this; //就这里,这说明objFirst 和objnext是objList的类型,感觉象用模板类实现
//sigleton



}
public:
static T* getObject(const K& key);
};

为题就出现在这里。这个objList类在用的时候需要指定T的类型,可是从代码你可以看出来T又是objList它自己的类型。好吗。定义就这样了


objList <objList<.......这里都无限循环>, string> myList;

就是说这是递归定义变量(当然没有这名词,但是意思是这样),在c++和C里面是绝对禁止的。
I don't mind if you r FAT.
I don't mind if you r UGLY.
I don't mind if you ACT CUTE.
But I can't STAND if you r FAT, UGLY and still ACT CUTE.

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录