小编典典

C++ 中的内部 typedef - 好风格还是坏风格?

all

我最近发现自己经常做的事情是声明与该类中的特定类相关的 typedef,即

class Lorem
{
    typedef boost::shared_ptr<Lorem> ptr;
    typedef std::vector<Lorem::ptr>  vector;

//
// ...
//
};

然后在代码的其他地方使用这些类型:

Lorem::vector lorems;
Lorem::ptr    lorem( new Lorem() );

lorems.push_back( lorem );

我喜欢它的原因:

  • 它减少了类模板引入的噪音,std::vector<Lorem>变得Lorem::vector等。
  • 它用作意图声明 - 在上面的示例中,Lorem 类旨在通过引用计数boost::shared_ptr并存储在向量中。
  • 它允许更改实现——即,如果 Lorem 需要boost::intrusive_ptr在稍后阶段更改为侵入式引用计数(通过),那么这将对代码的影响最小。
  • 我认为它看起来“更漂亮”,并且可以说更容易阅读。

不喜欢的理由:

  • 依赖项有时会出现问题 - 如果你想嵌入,比如说,Lorem::vector在另一个类中,但只需要(或想要)转发声明 Lorem(而不是在其头文件中引入依赖项),那么你最终不得不使用显式类型(例如,boost::shared_ptr<Lorem>而不是Lorem::ptr),这有点不一致。
  • 它可能不是很常见,因此更难理解?

我试图对我的编码风格保持客观,所以最好能得到一些其他的意见,这样我就可以稍微剖析一下我的想法。


阅读 66

收藏
2022-07-16

共1个答案

小编典典

我认为它是优秀的风格,我自己使用它。尽可能地限制名称的范围总是最好的,而使用类是在 C 中做到这一点的最佳方式。例如,C 标准库在类中大量使用
typedef。

2022-07-16