c – 模板编程的可维护性建议和最佳实践

前端之家收集整理的这篇文章主要介绍了c – 模板编程的可维护性建议和最佳实践前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
模板的可维护性是一个问题.当您在专用于通用库的社区外工作时,这是一个简单的事实.我不希望我的朋友和同事必须使用Clang来运行我的代码,只是因为……嗯…那么它不是真正的通用和便携式,是吗?但我迫切希望能够偶尔编写一些模板化的代码.

您使用哪些技巧来使模板化代码更易于使用,更易于维护,并且更具可读性?诸如描述性模板参数,enable-ifs以及代码风格的类似小怪癖之类的东西,一直到关于哪些编译器支持可变参数模板或要避免哪些模板(反)模式的建议.

简而言之,我应该避免哪些成语?我应该依靠哪个?
我希望我的代码优雅但不太优雅.

我找到的一些资源:
C++ FAQ
Error Decrypt
What are variadic templates?

解决方法

我使用以下方法

>在detail_ namespace中隔离您的众多类助手;只揭露必要的东西.
>对于(几乎)每个模板类,提供一个辅助函数来构造类型:它对迭代器和仿函数特别有用,然后可以内联构造.为此使用一个好的命名方案:iterator_transformer< Iter,F>由transform_iterator构造.
>使用一个好的命名方案(类的名词,方法的动词,枚举的形容词).采用后缀约定(_traits,_concept,…)并坚持下去(1)
>有一个模板元编程的约定:对我来说类型是返回类型的元函数的“返回类型”,value是返回静态const整数的函数的静态const返回类型,另一个是返回模板的元函数.你可能想要使用boost MPL,如果你滥用元编程,并遵循他们的约定(感谢@Noah Roberts)
>不要吝啬:做最适合你需要的事情.只有在为代码带来某些东西时才使用泛型编程.有时,普通的多态性更好.
>在标题中组织您的代码:内联实现进入您在“includable”标题中#include的“实现标题文件
>强迫自己使用标准算法:它们使代码更具可读性
>提供玩具/测试/样本课程,特别是如果您希望人们扩展您的代码.
>经常使用typedef:您应该像往常一样努力不对代码进行注释.
>不要让编译器早期失败而偏执:很少使用enable_if,它会降低代码的可读性.但是你可以在内部使用它.
>您有两个主要工具:函数模板的模板参数推导,以及类模板的部分特化的模式匹配.您应该尝试以最简单的方式使用这些工具.特别是,不要尝试根据类型是否实现某个概念或滥用enable_if来重载函数.把事情简单化.
>将复杂类的实现拆分为更简单的类.在这方面虐待特质课程(感谢@Noah Roberts)

(1)我使用_concept作为CRTP模式的基类(即“静态多态性”). CRTP很好,因为它允许您使用最少的代码优化默认实现.

猜你在找的C&C++相关文章