游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2737|回复: 7

怎么判断 一个类型是否为类类型?

[复制链接]

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2006-8-12 12:49:00 | 显示全部楼层 |阅读模式

用模板。
csdn等了一天都没结果 [em23]

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-8-12 13:33:00 | 显示全部楼层

Re:怎么判断 一个类型是否为类类型?

    可怜啊,CSDN^^
    看《c++ template》第19章,这本书上面详细讲了怎么做,呵呵。虽然程序不是太健壮,基本上够用了。如果想要更好的……就用boost吧,boost里集成的TypeTraits非常强壮而且易用。:)
    实际应用中,如果是自己写底层库的话,建议还可以考虑实现自己的(RTTI)动态类型信息查询机制,这样做虽然会占用一定的内存空间,却会带来很多的方便,这种RTTI的实现可以参考JAVA和C#的反射机制来做,如果想做简单一点,可以直接按《游戏编程精粹2》上相关文章简单的实现。RTTI应该说语言层次的功能,但C++提供的功能不全,所以只有自己实现了。

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-8-12 13:33:00 | 显示全部楼层

Re:怎么判断 一个类型是否为类类型?

此贴发完,就变成中士了,哈哈,爽了。

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
 楼主| 发表于 2006-8-12 14:39:00 | 显示全部楼层

Re:怎么判断 一个类型是否为类类型?

template<typename T>
class isClassT
{
private:
        typedef char one;
        typedef struct{char a[2];} two;

        template<typename C>static one test(int C::*);
        template<typename C>static two test(C);       
public:
        enum{Yes =  sizeof( isClassT<T>::test<T>(0) ) == sizeof(one)};//sizeof(two)
        enum{No = !Yes};
};


书里面的代码,为何不行?

42

主题

418

帖子

418

积分

中级会员

Rank: 3Rank: 3

积分
418
发表于 2006-8-12 15:12:00 | 显示全部楼层

Re:怎么判断 一个类型是否为类类型?

深入浅出mfc里面有详细的讲解mfc运行时类型识别机制,可以参考^_^

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
 楼主| 发表于 2006-8-12 15:22:00 | 显示全部楼层

Re:怎么判断 一个类型是否为类类型?

奇怪了。将
isClassT<T>::test<T>(0)
改成:

test<T>(0)

就可以了。 vc++ 2005
到底是什么原理?

//将test<T>(0) 改成 test<>(0)或test(0)  却又不通过

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
 楼主| 发表于 2006-8-13 01:06:00 | 显示全部楼层

Re:怎么判断 一个类型是否为类类型?


分析一下。

isClass<T>::test<T>(0) 这个T可能影响参数的类型。
如T int 参数可能被影响为int  而不只是模板参数本身。

test<>, test  这两个都是通过参数来演绎,这时候 test(c)  , test(int C::*), 演绎的结果只能是 test(C) ,因为第二个是要通过一个指针才能演绎出来的。

test<T>(0),这个不根据参数演绎的重载。会根据参数的特殊程度来选择。

但是书里面,确实是isClass<T>::test<T>(0)。 有点奇怪。
因为书的质量有点问题。 test(c) 可能是 test(...).


59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2006-8-14 10:57:00 | 显示全部楼层

Re:怎么判断 一个类型是否为类类型?

这段代码不是用的RTTI,而是编译时的检测,static_cast可以做普通的type之间的cast,而如果是cast class之间的东西,在编译期就会返回错误。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 03:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表