TypeSelect based on TypeTraits
来源:互联网 发布:linux下nginx安装配置 编辑:程序博客网 时间:2024/05/01 03:18
根据所要操作的型别,选择合适的操作方法;所要解决的是:如何得到所要操作的型别。注意这里的意思并不是识别出所要操作的型别,而是根据具体所要进行的事务选择所要操作的型别单元。
这样的情况很多,比如说,在排序中,是要使用指针进行排序?还是使用原值进行排序?比如原class中有指针,或者多态,那么最好使用指针排序。否则也许使用原值排序更好。
那,我们的任务就是根据用户给出的一个bool(标志原class中是否有指针,或者多态),来选择在本次算法中所要操作的具体对象,是T?还是T*?
这里定义一个select模板,该模板用于确定该操作对象(根据用户给出的bool)。
其中,
template < typename type1, typename type2 >
struct select< false, type1, type2 >
是对模板的特化。接受bool为false。
最终的RealType即是所确定的所要操作的对象。
在某class中,我们这样使用之:
所取得的ValueType即该对象。实际上,正常情况下,我们在模板中都应该提供ValueType,只不过这里的ValueType有更特殊的意义。
在这样的语境中,需要用户自己给出bool,需要用户自己在类中写出取得ValueType的晦涩的代码,也暴露了我们的具体实现。(C++模板本是暴露的……)
用户能否不需给出bool,而让我们自己的程序去完成这样的判断?
貌似不可以……
虽然在SGI_STL有相似的实现--__type_traits,但SGI-STL只内置了基本类型的__type_traits,如果是用户自定义的type,则需要用户自定义__type_traits。这和让用户传递个bool并没有显著的不同。
也许可以写程序或模板,来判断class中是否存在指针或多态。不过这样的东东绝不是一个模板函数就能完成的了……
但理论上是可行的。
目前,利用TypeTraits,我可以做到:
如果语义是:
1,始终操作其对象值;即,如果该类型为T*,则操作T*;否则操作T;
2,始终操作T。即,如果类型是T*,则操作T,否则操作T。
对1:
在我们的class中,这样使用:
对第2,可以将上述代码稍作更改。
对1,2我们可以直接使用TypeTraits,或者新建模板TypeSlection将TypeTraits稍作包装。这样,用户就不再提供bool。
TypeTraits展示如下:
看起来,TypeSelect 的应用要比较广一些……
另要注意的是:在 typedef typename PointerTraits<type>::PinterType PointerType; 中,typename是不可少的。
更多参考:《C++设计新思维》
- TypeSelect based on TypeTraits
- TypeTraits
- Based Off Versus Based On
- webkit based on win
- Spider based on scrapy
- iperf based on linux
- Dash Based On Plotly
- Based on or Basing on, 为何写作多用 Based on?
- content based routing based on header value
- Harris algorithm based on openCV
- OB52 based on Company Code
- CAMShift Algorithm Based on OpenCV
- Slicing filenames based on extension
- thinking on physical-based features
- android overlay based on msm8930
- RESTFUL Service : based on Jersey
- QT setup based on MinGW
- Restful application based on Cherrypy
- php实现url静态化
- 心境-人生的境界
- 面向对象的基本原则
- 求职历程--腾讯
- GDAL库学习笔记-坐标转化
- TypeSelect based on TypeTraits
- 使用AJAXRPC让B/S开发类似C/S
- php发送邮件与pop3邮件登录代码
- Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/aop]
- js 否含有汉字或全部是中文函数
- 好想是个破博客
- 按字母,数字和其它字符数计数
- Qualcomm,Freescale,MTK平台下Android开发的比较
- 这个博客能添加图片