代码之家  ›  专栏  ›  技术社区  ›  Frank

模板类型的命名约定?

  •  22
  • Frank  · 技术社区  · 15 年前

    传统上,模板类型的名称只是一个大写字母:

    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 {}; 
    

    它使它们脱颖而出(而且,它又是大写字母)。你怎么看?

    8 回复  |  直到 15 年前
        1
  •  31
  •   JaredPar    15 年前

    对于C++模板,我有两种模式

    如果只有一个模板参数,我将其命名为t(对于嵌套模板,则命名为u、v)。

    当有多个参数并且使用不明显时,我使用以t为前缀的描述性名称。例如,tkey、tvalue、tidentifiier等…这使得在整个模板使用过程中很容易发现参数。

    不过,我会避免使用全大写版本。大多数人使用C/C++中的所有大写标识符来表示宏定义。对模板参数重复该模式可能会使沿途的人感到困惑。

        2
  •  8
  •   Mykola Golubyev    15 年前

    我对模板参数使用约定名称,对存储的模板参数使用名称。

    template <typename TFirst, typename TSecond>
    class Templated
    {
        typedef TFirst FirstT;
        typedef TSecond SecondT;
    }
    
    typedef Templated<int, std::string> MyTemplated;
    ...
    const MyTemplated::FirstT size;
    
        3
  •  4
  •   ya23 devoured elysium    15 年前

    一般来说,如果只有一个类型参数,那么传统的方法是使用t。如果还有更多,请使用T作为前缀,例如TATOM。“前缀有助于立即看到它的类型参数。对单个类型参数使用tatom也是有效的。

        4
  •  1
  •   Patrick Glandien    15 年前

    您不应该对模板使用特殊的命名约定,只需对该类型的任何其他类型使用相同的约定(对于类或变量)。无论您使用的是模板类型/值还是普通类型/值,在代码中都不重要。

        5
  •  1
  •   dirkgently    15 年前

    我尝试遵循我的编译器供应商使用的概念:它不太短,也不太冗长。并帮助我阅读使用标准模板得到的错误消息。(这也是我从 const T& T const& )类似:

    template <class Ty, class Container>
    class my_algo { ...
    

    我的编译器通常使用:

    template <class _Ty, class _Container>
    class std_algo { ...
    
        6
  •  1
  •   xtofl Adam Rosenfield    15 年前

    在我们的商店里,我们使用匈牙利语符号。模板参数和其他参数一样,只是它们不是常量,也不是变量,而是类型。

    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 );
    }
    

    前缀描述了类型,而名称则表示参数在定义函数上下文中所扮演的角色。

        7
  •  0
  •   bayda    15 年前

    如果类有一个类型参数,则使用名称t。这也意味着此类中的所有操作都使用t。

    如果我没有参数,我会在你的解释中命名,比奥…
    如果模板参数不是我们在clas中使用的对象类型,例如strategy、comaporator或functor,那么我使用的是name而不是t,例如threadstrategy,compare。

    有时为了避免混合样式,我会在类中创建typedef:
    typedef t值\u类型;

    ——
    boost命名约定( http://www.boost.org/development/requirements.html#Naming_consistency )接下来介绍模板参数:
    模板参数名称以大写字母开头。

        8
  •  0
  •   John Dibling    15 年前

    我遵循与我遵循命名类和结构相同的常规命名模板参数类型名,这是为了大写第一个字母或每个单词,如下所示:

    class MyGizmo
    {
    };
    
    struct Thingy
    {
    };
    
    class TPSReport 
    {
    };
    
    
    template<class ValType> ...
    
    template<typename Number> ...