传统上,模板类型的名称只是一个大写字母:
template<class A, class B, class C>
class Foo {};
但我犹豫不决,因为它不具描述性,因此难以阅读。所以,这样的事情不会更好:
template<class AtomT, class BioT, class ChemT>
class Foo {};
我也倾向于认为以下不是一个坏主意:
template<class ATOM, class BIO, class CHEM>
class Foo {};
它使它们脱颖而出(而且,它又是大写字母)。你有什么看法?
答案 0 :(得分:32)
对于C ++模板,我有几种模式
如果只有一个模板参数,我将其命名为T(或嵌套模板的U,V)。
如果有多个参数并且使用不是很明显,那么我使用前缀为T的描述性名称。例如,TKey,TValue,TIdentifiier等...这使得参数在整个模板使用中都很容易被发现。
我会避免全部大写版本。大多数人使用C / C ++中的所有大写标识符来表示宏定义。重复模板参数的模式可能会使人们感到困惑。
答案 1 :(得分:8)
我使用约定TName作为模板参数,使用NameT作为存储模板参数。
template <typename TFirst, typename TSecond>
class Templated
{
typedef TFirst FirstT;
typedef TSecond SecondT;
}
typedef Templated<int, std::string> MyTemplated;
...
const MyTemplated::FirstT size;
答案 2 :(得分:4)
通常,传统方法是在只有一个类型参数的情况下使用T.如果还有更多,请使用T作为前缀,例如TAtom。 “T”前缀有助于即时查看其类型参数。将TAtom用于单个类型参数也是有效的。
答案 3 :(得分:1)
您不应该对模板使用特殊的命名约定,只需使用与该类型的任何其他约定相同的约定(对于类或变量)。在代码中,无论您使用的是模板类型/值还是正常模板都无关紧要。
答案 4 :(得分:1)
我尝试遵循我的编译器供应商使用的概念:它不是太短而且不太冗长。并帮助我阅读标准模板中的错误消息。 (这是我从const T&
切换到T const&
的另一个原因。类似的东西:
template <class Ty, class Container>
class my_algo { ...
我的编译器通常会使用:
template <class _Ty, class _Container>
class std_algo { ...
答案 5 :(得分:1)
在我们的商店,我们使用HungF ## ngarian表示法。模板参数只是与所有其他参数一样的参数,除了它们不是const,也不是变量,而是类型。
template< typename at_Container, typename at_Functor >
at_Functor& foreach( const at_Container& ac_Cont, at_Functor& av_Func ) {
return std::foreach( ac_Cont.begin(), ac_Cont.end(), av_Func );
}
前缀描述了类型,而名称则表示参数在定义函数的上下文中扮演的角色。
答案 6 :(得分:0)
如果我有一个带有一个类型参数的类,我使用名称T.这也意味着这个类中的所有操作都在使用T.
如果我在你的解释AtomT,BioT ......中有很少的参数命名 如果模板参数不是我们在clas中工作的对象的类型,例如策略,comaparator或仿函数,我使用没有T的名称,例如ThreadStrategy,比较。
有时为了避免混合风格我在课堂上制作typedef:
typedef T value_type;
-
提升命名约定(http://www.boost.org/development/requirements.html#Naming_consistency)接下来说明模板参数:
模板参数名称以大写字母开头。
答案 7 :(得分:0)
我遵循相同的一般约定命名模板参数类型名称,因为我遵循命名类&amp;结构,用于大写第一个字母或每个单词,如下所示:
class MyGizmo
{
};
struct Thingy
{
};
class TPSReport
{
};
template<class ValType> ...
template<typename Number> ...