你对 typedef'ing shared_ptr 的约定是什么?

新手上路,请多包涵

我在 typedef 的命名约定之间来回切换 boost::shared_ptr 模板。例如:

 typedef boost::shared_ptr<Foo> FooPtr;

在确定约定之前,我想看看其他人使用什么。你的约定是什么?

编辑:

对于那些在 typedef Foo 人来说, Foo 现在“知道”它是如何被传递的,你不会感到困扰吗?它似乎打破了封装。这个怎么样:

 class Foo
{
public:
    typedef std::vector<Foo> Vector;
};

你现在不会这样做,对吗? :-)

原文由 Emile Cormier 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 292
1 个回答

我也想为这个老问题添加一些选项,即使它们可能会引起很大争议……

OldPeculier 的回答 类似,我喜欢尽可能接近标准指针的短类型名称。

在几乎所有地方都使用了 shared_pointer 的项目中,我使用了

typedef boost::shared_ptr<Foo> Foo_;

// usage examples:
Foo* myFoo0;
Foo_ myFoo1;

我利用了三件事:

  1. 下划线字符在某种程度上看起来像一个运算符,但主要被视为一个字母,因此它可以成为标识符的一部分(我 没有看到在标识符末尾禁止它的规则)。
  2. 我只需要想出 一个 typedef。
  3. 我更喜欢 Foo* myFoo1; 而不是 Foo *myFoo1; 有几个原因,它与 Foo_ myFoo2 很好地匹配。

当需要不同类型的智能指针的 typedef 时,我会选择

typedef shared_ptr<Foo> Foo_S;
typedef weak_ptr<Foo>   Foo_W;
typedef unique_ptr<Foo> Foo_U;

// usage examples:
Foo*  myFoo2;
Foo_S myFoo3;
Foo_W myFoo4;
Foo_U myFoo5;

随着标准和编译器实现中对 Unicode 支持的增加,我很想尝试以下语法,假设这些星号将被视为类型标识符的常规部分。当然,这只有在所有相关的开发人员都有一个方便的文本输入法时才实用:

 typedef shared_ptr<Foo> Foo★;
typedef weak_ptr<Foo>   Foo☆;
typedef unique_ptr<Foo> Foo✪;

// usage examples:
Foo* myFoo6;
Foo★ myFoo7;
Foo☆ myFoo8;
Foo✪ myFoo9;

(快速测试表明这实际上不起作用,至少在我的构建环境中是这样。但 Foo_ä 也是如此。)

原文由 Lena Schimmel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题