11月1日 C++编译期Constraints设计 (转载) 所谓的compile-time Constraints就是在编译期使用C++的语法规则对设计进行约束检查,尽量在编译期把程序的问题暴露出来,节省成本。 常用的规则: 1.大小为0的数组在编译期会报错 template
void check_size() { int dmp[sizeof(T1)==sizeof(T2)]; } 比如 check_size
();//ok check_size
();//compile error:cannot allocate an array of constant size 0 2.不同类型的指针需要强制转换 以此可以用来判断两个对象是否有继承关系 template
void is_derived(T1 *pd =0 ,T2 *pb=0) { pb = pd; } 比如: is_derived
() //compile failed 3.union的成员不能是非POD union Test { std::string s; //illegal }; 这一点可以用来测试一个类型是否是POD template
void check_pod() { union { T data; }; }; 比如: check_pod
();//ok check_pod
();//failed 常用的技巧: 1.利用模板特化 Loki里面的例子 namespace Loki { template
struct CompileTimeError; template<> struct CompileTimeError
{}; } #define LOKI_STATIC_CHECK(expr, msg) / { Loki::CompileTimeError<((expr) != 0)> ERROR_##msg; (void)ERROR_##msg; } 利用特化来定制错误信息 2.利用空函数来实现0开销 编译器可能将空函数优化掉 3.利用enum无开销的取得编译期的所得到的整数值 Loki里面的例子: template
struct Length; template <> struct Length
{ enum { value = 0 }; }; template
struct Length< Typelist
> { enum { value = 1 + Length
::value }; };
C++编译期Constraints设计 (转载)
最新推荐文章于 2025-03-11 21:56:51 发布
本文介绍了C++中编译期约束的设计方法,通过具体的编程技巧如利用模板特化、空函数及枚举等手段,在编译阶段就发现并解决代码中存在的问题,提高软件质量。

609

被折叠的 条评论
为什么被折叠?



