近期学到一些模板元编程的方法,进行总结:
1.多利用模板转发技术:
模板转发技术为一个通用技术,可以轻易扩展已有类的功能,不仅限于模板元编程。
实现步骤:假设有一个类为A,我们需要实现一个函数交fun()。于是,我们只需要实现一个类AImpl,在其中提供接口fun(),接着,使A继承AImpl,于是一切就都OK了。
要点分析:可以在几乎不改变A的情况下扩展功能。
2.利用模板可以实现在头文件中定义static成员:
实现举例:
原先使用:
Test.h
struct A {
static int m;
};
int A::m = 5; //放在头文件中,若有多个文件包含此头文件,将无法通过编译,只能移到.cpp中
模板使用:
Test.h
template <typename T>
struct A {
static T value;
};
int A<int>::value = 5;
Ok,即使多个文件包含此头文件,一样能够通过编译。
使用猜想:最简单的单例类中存在一个静态成员,总必须在.cpp中进行定义,可以采用此方法,只需要在头文件中追加。
3.template<typename T> struct Type2Type { typedef T type; };
包装类,可以使加入模板元中所有类型均能通过type来获得。