几种实用的C++初始化技术
来源:互联网 发布:node和nodejs的区别 编辑:程序博客网 时间:2024/05/24 06:15
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
template< > factorial<1>{enum {result=1};};
template< > factorial
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)
- 几种实用的C++初始化技术
- C++:只用初始化列表初始化变量的几种情况
- Objective-C NSString 创建初始化的几种方法
- 几种实用调试方法-C语言
- 【c++】必须在类的初始化列表中初始化的的几种情况
- 【c++】必须在类初始化列表中初始化的几种情况
- C/C++ 初始化几种方式
- 需要初始化的几种
- sed 非常实用的几种用法!
- 几种实用的推广方法 转载
- SQL注入的几种实用办法
- 几种初始化EHCache的方式
- string初始化的几种方法
- 字符数组的几种初始化方法
- 数组初始化的几种方式;
- 结构体初始化的几种方法
- 拷贝初始化的几种情况
- 初始化Mat的几种方法
- 各种Blog的API地址和设置方法
- 活用注册表监视器RegMon
- Welcome MySQL to Sun:Sun收购MYSQL
- 2007最受欢迎的十大Ajax技术文章
- study023
- 几种实用的C++初始化技术
- How are you doing, Jane?
- study024
- 终于安好了SQL2005了!
- 固定一个标准Win32程序的窗口
- 《大规模C++程序设计》读书笔记11
- study025
- About ABAP Debugger
- propel 安装