CppUnit关于代码移植性的编码指南

  1. 不要显式地声明CppUnit命名空间,使用CPPUNIT_NS_BEGIN和CPPUNIT_NS_END两个宏代替

  2. 不要显式地使用CppUnit来访问CppUnit命名空间的类,使用CPPUNIT_NS代替

  3. 不要使用using namespace来引入整个命名空间,使用完全限定的方法。比如使用STL的vector,那就是要std::vector。

  4. 不要直接使用C++的类型转换,使用CppUnit的CPPUNIT_CONST_CAST宏。

  5. 不要使用mutable关键字[注1],替代的做法是做常转换。

  6. 不要在模板声明中使用typename关键字,使用class。

  7. 不要使用RTTI(typeid)和dynamic_cast。

  8. 不要直接使用STL的容器,应该使用include/cppunit/portability下面提供的包装器。用来解决有些编译器不支持缺省模板参数和需要分配器(allocator)的编译器。

  9. 不要使用缺省模板参数。如果真的需要,使用STLPort包装器。(注:在我的版本中没有找到STLPort)

  10. 不要使用模板化的成员函数(类里面定义的模板方法),应该直接声明为一个简单的模板函数。(主流的编译器处理它都有一些问题。)

  11. 不要在模板函数里,使用缺省参数。所有的编译器都不支持。(注:不确定现在的情况)

  12. 不要使用STL容器的at()方法,应该使用数组访问[]方式。at()在一些gcc的版本上面不支持。

  13. 应该使用类似(*ref_ptr).data的方式解引用取值,而不是ref_ptr->data。

  14. 简单点说,需要在没有下面特性的C++编译器上编译通过:

    • C++式的类型转换

    • mutable和typename关键字

    • RTTI

    • 缺省模板参数

    • 模板化成员函数

    • 命名空间

只要遵循这些编程指南,基本上所有的C++编译器都可以编译通过,只需要:STL可用(在没在std的命名空间均可),有类似于字符流strstream和IO流iostream的支持,异常。

来源于:\cppunit\CodingGuideLines.txt

注1:在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

你可能感兴趣的:(CppUnit关于代码移植性的编码指南)