我最近发现自己经常做的事情是声明与该类中特定类相关的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
在以后的阶段(通过)对引用计数进行计数,那么这将对代码产生最小的影响。 - 我认为它看起来“更漂亮”并且可以说更易于阅读。
我不喜欢的原因:
- 依赖有时会出现问题-例如,如果您想将a嵌入
Lorem::vector
到另一个类中,但只需要(或想要)转发声明的Lorem(而不是在其头文件中引入依赖),则最终必须使用显式类型(例如boost::shared_ptr<Lorem>
而不是Lorem::ptr
),这有点不一致。 - 这可能不是很常见,因此很难理解吗?
我尝试以我的编码风格为目标,因此对它有其他意见是很好的,这样我可以对自己的想法进行一些剖析。