any.h
来源:互联网 发布:测试网络摄像头软件 编辑:程序博客网 时间:2024/06/08 04:04
我认为这是写的非常漂亮的一个头文件,足够底层,足够抽象。由于我的能力有限,很难彻底地理解作者的思想,请大家见谅。
在any.h中,有一个名字空间anyimpl,这名字空间的内容为any类,提供一些基本功能的实现,让我们来一起看一看。
struct bad_any_cast;
该结构继承于std::runtime_error,用于出现any转换异常是抛出。
struct empty_any;
空any,nothing.
inline std::ostream & operator <<(std::ostream & out, const empty_any &);
重载操作符<<,返回一个输出为”[empyt_any]”的ostream的引用,具体有什么应用,到后面看到再补充。
struct base_any_policy{ virtual void static_delete(void** x) = 0; virtual void copy_from_value(void const* src, void** dest) = 0; virtual void clone(void* const* src, void** dest) = 0; virtual void move(void* const* src, void** dest) = 0; virtual void* get_value(void** src) = 0; virtual ::size_t get_size() = 0; virtual const std::type_info& type() = 0; virtual void print(std::ostream& out, void* const* src) = 0;};
纯虚类,声明了若干种方法。
struct typed_base_any_policy;
该结构继承于base_any_policy.
其定义了一个虚方法
virtual ::size_t get_size();
其返回相关类型的大小,比如:
type_based_any_policy<char> a;a.get_size() == 1;
该结构并且声明了一个新方法
virtual const std::type_info& type(){ return typeid(T)};
返回结构特定的类型,这里只适用于基本类型。
下面两个结构:
struct small_any_policy;struct big_any_policy;
都继承于typed_base_any_policy,他们都定义实现了,base_any_policy中的各种方法,不同之处是small对应的浅拷贝,big对应的深拷贝(不懂为什么以small,big命名。。),所以他们在clone,move,static_delete上现实的方法又有所不同,大家仔细看看就会发现。
接下来就是choose_policy结构。
/// Choosing the policy for an any type is illegal, but should never happen./// This is designed to throw a compiler error.
功能介绍完毕。
方法:
base_any_policy* get_policy()
根据不同的类型返回选择不同policy。
class any;
这个类没什么好分析的,大家看看源码就行了。
0 0
- any.h
- any
- Please be careful when include a resouce.h file to any cpp to avoid regression.
- boost::any
- Any questions?
- Boost::any
- BOOST--any
- Enumerable#any?
- boost::any
- boost::any
- Boost::Any
- boost::any
- any 、all
- any 、all
- boost any
- boost any
- Any容器
- Scala:Any
- 《近匠》专访 SENSORO CTO 赵东炜:物联网行业发展分析
- 解析类路径下properties文件
- 编写一个函数。函数的3 个参数是一个字符和两个整数。字符参数是需要输 出的字符。第一个整数说明了在每行中该字符输出的个数,第二个整数指的是需 要输出的行数。编写一个调用该函数的程序
- 硬件锁使用说明
- Xcode历史版本下载
- any.h
- express 4.X.X版本 npm版本3.X.X版本以上 没有layout.js文件的解决方法 页面布局设置的方法
- AndroidStudio导入项目报java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessExce
- IntelliJ Idea 常用快捷键列表
- eclipse.ini配置文件
- ld: framework not found ReactiveCocoa clang: error: linker command failed with exit code 1
- 去除快捷方式小箭头
- jdk配置
- Web Service 的介绍及入门程序