Jak*_*zer 7 c++ maintenance templates readability
模板的可维护性是一个问题.当您在专用于通用库的社区外工作时,这是一个简单的事实.我不希望我的朋友和同事必须使用Clang来运行我的代码,只是因为......嗯...那么它不是真正的通用和便携,是吗?但我迫切希望能够偶尔编写一些模板化的代码.
您使用哪些技巧来使模板化代码更易于使用,更易于维护,并且更具可读性?像描述性模板参数,enable-ifs和代码风格的类似小怪癖,一直到关于哪些编译器支持可变参数模板或要避免哪些模板(反)模式的建议.
简而言之,我应该避免哪些成语?我应该依靠哪个?
我希望我的代码优雅但不太优雅.
我发现的一些资源:
C++ FAQ
Error Decrypt
什么是可变参数模板?
Ale*_* C. 10
我使用以下方法:
detail_命名空间中隔离您的众多类助手; 只揭露必要的东西.iterator_transformer<Iter, F>由...构造transform_iterator._traits,, _concept...)并坚持下去(1)type是返回类型的元函数的"返回类型",value是返回静态const整数的函数的静态const返回类型,other用于返回模板的元函数.你可能想要使用boost MPL,如果你滥用元编程,并遵循他们的约定(感谢@Noah Roberts)enable_if,这会使代码的可读性降低.但是你可以在内部使用它.enable_if.把事情简单化.(1)我_concept用于CRTP模式的基类(即"静态多态").CRTP很好,因为它允许您使用最少的代码优化默认实现.
我同意这里的大多数答案,其中指出模板是(越来越多?)该语言的重要组成部分,并且没有人可以假装自己是 C++ 开发人员,但不能阅读一些合理的模板代码。
然而,模板可能会变得凌乱,所以我倾向于遵循一些准则:
details命名空间中显示严格的最小值并隐藏详细信息,或者更好的是,在单独的头文件中typedef尽可能多的:当一个模板类的“家庭”携手共进,往往期望非常相同的模板参数,提供嵌套的typedef(在“主”库对象,或在一个单独的模板struct)。