博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几种实用的C++初始化技术
阅读量:4129 次
发布时间:2019-05-25

本文共 1504 字,大约阅读时间需要 5 分钟。

 

C++经过这么多年的发展,已然成了一种文化和艺术,而这种艺术和文化并不是C++所固有的,是C++在各个方面的应用的总结和艺术化的结果。C++看起来比较复杂,但是深入其中你会发现C++是那么优美而富有哲学感。为了使C++更艺术化,C++语言大师们都为此而付出甚多,他们都在追求简单,追求编程的艺术。

几乎所有的编程语言都有这样或那样的初始化方法,比较新的语言如C#就将很多的初始化技术都集成到编译器里面去了,而很多编程语言都需要程序员用特定的方法去实现。C++的初始化技术很大程度上就依赖于程序员。本文介绍了几种常见的、实用的初始化技术。

1. 编译期初始化

所谓的编译期初始化,指的是符号的值在编译期就可以确定下来,一般包括普通常量的初始化和已经利用模板技术构造常量的初始化技术。

1.1. 常量

如const int Scale = 1;

enum ColorSpace{RGBColorSpace,CMYKColorSpace};

class Example{

static const int Count = 1;

}

1.2. 利用模板

这是模板元编程实用到的一个最基本的技术。这种技术利用编译器对模板进行递归编译的机理来实现某个常量的初始化。如:

template factorial;

template< > factorial<1>{enum {result=1};};

template< > factorial {enum {result=N* factorial ::result};};

2. 静态初始化

所谓的静态初始化,指的是程序启动的时候初始化全局(静态)变量或静态成员编程的行为。

2.1. 全局变量初始化

如int g_globalCount = 1;

static int g_s_globalCount = 1;

2.2. 静态成员变量的初始化

如class Example{

static Example NullExample;

}

Example Example::NullExample;

3. 动态初始化

这种初始化技术利用了类的构造和析构函数的基本特性。

如我们需要在程序启动的时候注册某个类的创建函数到类工厂,我们可以按照下面的方式进行做:

定义初始化所需要的宏等

typedef Geometry* (*CreateFuncPtr)();

struct auto_register{

auto_register(CreateFuncPtr func){//注册}

~auto_register(){//取消注册}

};

#define AUTO_REGISTER(class_name)/

static const auto_register _register## class_name ##( class_name::CreateGeometry);

定义基于上面的初始化技术的实现

class Geometry{

public: static Geometry* CreateGeometry(){…}

}

class DiamondGeometry{

public: static DiamondGeometry* CreateGeometry(){…}

}

AUTO_REGISTER(DiamondGeometry)

class RectangleGeometry{

public: static RectangleGeometry* CreateGeometry(){…}

}

AUTO_REGISTER(RectangleGeometry)

转载地址:http://kxhpi.baihongyu.com/

你可能感兴趣的文章
c19---指针和字符串
查看>>
Surface Pro 3 扩展坞体验
查看>>
Java 7 中 NIO.2 的使用——第二节 元数据文件的属性
查看>>
摆渡人--刚开始不解,后来的感动
查看>>
C# 窗体最大化(自适应任务栏位置)
查看>>
JAVA基础--MySQL
查看>>
运行mysql时,提示Table ‘performance_schema.session_variables’ doesn’t exist
查看>>
Hexo+GitHub+Netlify一站式搭建属于自己的博客网站
查看>>
Python连接Mysql数据库
查看>>
解决linux环境mysql的sql语句严格区分大小写问题
查看>>
java导出word的6种方式(转发)
查看>>
图的遍历算法
查看>>
吃自助餐怎么样一个顺序吃法才合算?
查看>>
WebUI Studio for Silverlight控件发布2013版本 新增ClientUI报表和金融图表
查看>>
Android习惯——给全部Activity添加集合管理
查看>>
二叉搜索树中第k小的元素
查看>>
rabbitmq,生成者和消费者
查看>>
Swift中用正规表达式判断String是否是手机号码
查看>>
暗影猎人第一二季/全集Shadowhunters迅雷下载
查看>>
bootstrap验证
查看>>