最近我经常发现自己在类中声明与其相关的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
),这有点不一致。 - 它可能不太常见,因此可能更难理解?
我尽力以客观的编码风格进行,所以能得到其他人的意见会很有帮助,这样我就可以分析思维了。