模板类型的命名约定?

发布于 2024-07-16 04:07:36 字数 410 浏览 5 评论 0原文

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

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

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

Traditionally, the names of template types are just a single upper-case letter:

template<class A, class B, class C>
class Foo {}; 

But I hesitate to do this because it's non-descriptive and hard therefore to read. So, wouldn't something like this be better:

template<class AtomT, class BioT, class ChemT>
class Foo {}; 

I also tend to think the following would not be a bad idea:

template<class ATOM, class BIO, class CHEM>
class Foo {}; 

It makes them stand out (and also, it's upper-case letters again). What's your opinion?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

遇见了你 2024-07-23 04:07:36

对于 C++ 模板,我有几种模式。

如果只有一个模板参数,我将其命名为 T(或嵌套模板的 U、V)。

当有多个参数并且用途不是很明显时,我会使用以 T 为前缀的描述性名称。例如,TKey、TValue、TIdentifiier 等...这使得在整个模板使用过程中很容易发现参数。

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

For C++ templates I have a couple of patterns

If there is just a single template parameter, I name it T (or U,V for nested templates).

When there are multiple parameters and the use is not immediately obvious then I use descriptive names prefixed with T. For example, TKey, TValue, TIdentifiier, etc ... This makes the parameters fairly easy to spot throughout the template usage.

I would avoid the all upper case version though. Most people use all upper case identifiers in C/C++ to represent a macro definition. Repeating that pattern for a template parameter is likely to confuse people down the road.

_失温 2024-07-23 04:07:36

我使用约定 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;

I use convention TName for the template parameter and NameT for stored template parameter.

template <typename TFirst, typename TSecond>
class Templated
{
    typedef TFirst FirstT;
    typedef TSecond SecondT;
}

typedef Templated<int, std::string> MyTemplated;
...
const MyTemplated::FirstT size;
悍妇囚夫 2024-07-23 04:07:36

一般来说,如果只有一种类型参数,传统的方法是使用 T。 如果有更多,请使用T作为前缀,例如TAtom。 “T”前缀有助于立即查看它的类型参数。 使用 TAtom 作为单一类型参数也是有效的。

Generally, the traditional way is to use T if there is only one type param. If there is more, use T as prefix, e.g. TAtom. "T" prefix helps to instantly see it's type parameter. Using TAtom for a single type parameter is also valid.

怪异←思 2024-07-23 04:07:36

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

You shouldn't use a special naming convention for templates, just use the same convention as for any other of that type (as for classes or variables). It shouldn't matter in the code whether you are working with template types/values or normal ones.

清旖 2024-07-23 04:07:36

如果我有一个带有一个类型参数的类,我将使用名称 T。这也意味着该类中的所有操作都与 T 一起使用。

如果我有很少的参数,我将按照您的解释 AtomT、BioT...
如果模板参数不是我们在类中使用的对象类型,例如策略、比较器或仿函数,我将使用不带 T 的名称,例如 ThreadStrategy、Compare。

有时为了避免混合样式,我会在课堂上进行 typedef:
typedef T 值类型;

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

If I have class with one type parameter I am using name T. Also it mean that all operartion in this class are working with T.

If I have few parameter I'm naming as in your explamle AtomT, BioT...
If template parameter is not type of object with which we working in clas e.g. strategy, comaparator or functor, I'm using name without T e.g. ThreadStrategy, Compare.

Sometimes for avoid mixing styles I'm making typedefs in class:
typedef T value_type;

--
Boost naming convention (http://www.boost.org/development/requirements.html#Naming_consistency) says about template parameters next:
Template parameter names begin with an uppercase letter.

墨小墨 2024-07-23 04:07:36

我尝试遵循我的编译器供应商使用的概念:它不太短也不太冗长。 并帮助我阅读使用标准模板收到的错误消息。 (这也是我从 const T& 切换到 T const& 的另一个原因)。 像这样:

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

我的编译器通常会使用的地方:

template <class _Ty, class _Container>
class std_algo { ...

I try to follow the notion my compiler vendor uses: it's not too short and not too verbose. And helps me read the error messages I get with standard templates. (Which is another reason why I switched from const T& to T const&). Something like:

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

where my compiler will typically use:

template <class _Ty, class _Container>
class std_algo { ...
桃扇骨 2024-07-23 04:07:36

在我们的商店,我们使用 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 );
}

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

At our shop, we use HungF##ngarian notation. Template arguments are just arguments like all others, except they're not a const, nor a variable, but a type.

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

The prefix describes the type, while the name is meant to say something of the role the argument plays in the context of the defined function.

一张白纸 2024-07-23 04:07:36

我遵循命名模板参数类型名的通用约定,就像我遵循命名类和类一样。 结构体,即将第一个字母或每个单词大写,如下所示:

class MyGizmo
{
};

struct Thingy
{
};

class TPSReport 
{
};


template<class ValType> ...

template<typename Number> ...

I follow the same general conventions naming template parameter typenames as I follow naming classes & structs, which is to capitalize the first letter or each word, like so:

class MyGizmo
{
};

struct Thingy
{
};

class TPSReport 
{
};


template<class ValType> ...

template<typename Number> ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文