Impossible is nothing
爱过知情重醉过知酒浓 花开花谢终是空 缘份不停留像春风来又走 女人如花花似梦
公告
日历
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
统计
随笔 - 8
文章 - 91
评论 - 16
引用 - 0
导航
C++博客
首页
发新随笔
发新文章
联系
聚合
管理
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
(4)
STL/BOOST(4)
(rss)
随笔档案
(8)
2006年6月 (2)
2006年4月 (4)
2006年3月 (1)
2006年2月 (1)
文章分类
(77)
C++语言(57)
(rss)
GDI/GDI+(1)
(rss)
Windows/MFC(3)
(rss)
编译器(4)
(rss)
软件工程(11)
(rss)
图像处理(1)
(rss)
文章档案
(91)
2006年7月 (4)
2006年6月 (12)
2006年5月 (3)
2006年4月 (4)
2006年3月 (27)
2006年2月 (41)
相册
文章用图
搜索
最新评论
1. re: STL学习笔记[未登录]
很详细,赞
--bneliao
2. re: 深度探索c++的对象模型
笔记很详细,赞
--bneliao
3. re: 近日复习记录
不错嘛!
--秦歌
4. re: 区域填充算法
顶顶顶顶顶顶顶顶
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
顶顶顶顶
顶顶顶顶
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
顶顶顶顶
--lishali
5. re: Singleton模式的演化[未登录]
评论内容较长,点击标题查看
--galaxy
阅读排行榜
1. 从输入流中读入一行(2243)
2. sap的几道笔试题目(转)(1437)
3. 工作中发现的(1313)
4. 什么是调色板?(970)
5. Stay Hungry, Stay Foolish" (818)
6. 继续贴面试题目(708)
7. 近日复习记录(629)
8. 要读的书(522)
评论排行榜
1. 工作中发现的(3)
2. sap的几道笔试题目(转)(2)
3. 继续贴面试题目(1)
4. 从输入流中读入一行(1)
5. Stay Hungry, Stay Foolish" (1)
一个模板巧妙技术,语法技巧
#include
<
iostream
>
//
返回类型,大小分别为1、2
typedef
char
RT1;
typedef
struct
{
char
a[
2
];
}
RT2;
//
选择这个版本将返回char,大小为1
template
<
typename T
>
RT1 test(typename T::X
const
*
)
{
int
dumy
=
0
;
dumy
++
;
}
//
选择这个版本将返回char,大小为2
template
<
typename T
>
RT2 test(
)
{
int
dumy
=
0
;
dumy
++
;
}
//
依靠编译器自动选择test函数,然后依据返回类型判断是否含有X
template
<
typename T
>
bool
type_has_member_type_X()
{
return
(
sizeof
(test
<
T
>
(
0
))
==
1
);
}
//
有X类型的类
class
HasX
{
public
:
class
X
{
}
;
}
;
//
无X类型的类
class
NonX
{
public
:
class
Y
{
}
;
}
;
int
_tmain(
int
argc, _TCHAR
*
argv[])
{
//
编译器选择重载函数策略:选择类型最匹配版本
//
倾向于把0转化为常量空指针,所以选择返回为RT1版本
if
(type_has_member_type_X
<
HasX
>
())
{
std::cout
<<
"
Has X
"
<<
std::endl;
}
else
{
std::cout
<<
"
Non X
"
<<
std::endl;
}
//
没有T::X,所以选择返回为RT2版本
if
(type_has_member_type_X
<
NonX
>
())
{
std::cout
<<
"
Has X
"
<<
std::endl;
}
else
{
std::cout
<<
"
Non X
"
<<
std::endl;
}
return
0
;
}
输出结果:
Has X
Non X
posted on 2006-04-06 00:17
笑笑生
阅读(376)
评论(0)
编辑
收藏
引用
所属分类:
C++语言
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
Effective C++
Essential C++读书笔记
深度探索c++的对象模型
理解复杂声明
一个模板巧妙技术,语法技巧
一个复杂的boost.lambda表达式的例子
C++ 编程思想学习笔记-命名控制
2005年华为招聘--C语言笔试试题
dynamic_cast详解
vc++7.1转移到vc++2005 需要的一些变动
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Copyright © 笑笑生
Powered by:
博客园
模板提供:
沪江博客