Phi*_*ipp 5 c++ templates coding-style
我们根据这些指南定义了一些C++编码风格指南.数字8表示"代表模板类型的名称应该是一个大写的字母." 说明:"C++开发社区的常见做法.这使得模板名称相对于所有其他名称都很突出."
这真的很常见吗?我同意这很有道理template<class T> class vector {...}.但是,如果我有几个模板参数怎么办?我不认为这<class A, class B>比理解更容易<class AllocationPolicy, class ThreadingPolicy>.
您是否同意通常情况下不应用给定的规则(根据1 ...允许)?
谢谢你的想法!
我不同意这个命名惯例.对我来说,表示完全通用类型的模板参数作为一个简单的字母有意义 - 这是一种类型T,我真的不关心哪个.但是如果对类型有任何要求,那么生成一个标识模板参数的名称是有意义的:template <typename T, typename Allocator> struct container- 第一种类型是通用的,任何类型T都适合,但第二种类型是分配器.
它与您不希望调用参数的函数没有什么不同a,b...按顺序或外观,而是作为文档的一部分生成有意义的名称.另外,如果开发样式指南,我会考虑在模板类的情况下要求模板参数的本地typedef以及对类型的要求的静态断言(尽可能).也就是说,至少在概念提供该功能之前.
我认为STL是库的一个很好的例子,你可以看到生成typedef有助于读取代码(来自g ++ 4.2 stl):
类别:
// from <vector> -> <bits/stl_vector.h>
template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
class vector : protected _Vector_base<_Tp, _Alloc>
{
// Concept requirements.
typedef typename _Alloc::value_type _Alloc_value_type; // _Alloc contains value_type internal type
__glibcxx_class_requires(_Tp, _SGIAssignableConcept) // _Tp is assignable
[...]
public:
typedef _Tp value_type; // from here on _Tp is not mentioned
typedef typename _Tp_alloc_type::reference reference; // check + typedef
[...]
iterator begin() {
// without typedef:
// __gnu_cxx::__normal_iterator<pointer, vector_type> begin() {
[...]
reference operator[](size_type __n)
// _Tp& operator[](size_type __n)
[...]
// from <memory>
template <typename _Tp>
class auto_ptr
{
[...]
template <typename _Tp1>
auto_ptr(auto_ptr<_Tp1>& __a) throw()
Run Code Online (Sandbox Code Playgroud)
功能:
template <typename _InputIterator, typename _Tp>
inline _InputIterator find( _InputIterator __first, _InputIterator __last, _Tp value ) {
// concept requirements
__glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
[...]
Run Code Online (Sandbox Code Playgroud)
所有的名字都是由前缀_以及一个大写字母或第二_,这是实施保留的名称,并且他们也喜欢_Tp过_T,但最后你可以看到,每当一类是通用的叫法_Tp,_Tp1... ,当它附加一些特定要求时,选择一个更明智的名称.
它们之间有一条细线,例如std::vector,对泛型类型有实际要求:_Tp必须是可分配的,但在一天结束时,它是一种大多数类型._Assignable在一些需要多个容器的容器中调用它会很奇怪.
| 归档时间: |
|
| 查看次数: |
1634 次 |
| 最近记录: |