Một cái gì đó tôi đã thấy mình làm thường xuyên gần đây là tuyên bố typedefs có liên quan đến một lớp cụ thể trong lớp đó, tức là
class Lorem
{
typedef boost::shared_ptr<Lorem> ptr;
typedef std::vector<Lorem::ptr> vector;
//
// ...
//
};
Các loại này sau đó được sử dụng ở nơi khác trong mã:
Lorem::vector lorems;
Lorem::ptr lorem( new Lorem() );
lorems.push_back( lorem );
Những lý do tôi thích nó:
- Nó làm giảm tiếng ồn được giới thiệu bởi các mẫu lớp,
std::vector<Lorem>
trở thànhLorem::vector
, v.v. - Nó phục vụ như một tuyên bố về ý định - trong ví dụ trên, lớp Lorem được dự định là tham chiếu được tính thông qua
boost::shared_ptr
và được lưu trữ trong một vectơ. - Nó cho phép thực hiện thay đổi - tức là nếu Lorem cần được thay đổi để được tham chiếu xâm nhập được tính (thông qua
boost::intrusive_ptr
) ở giai đoạn sau thì điều này sẽ có tác động tối thiểu đến mã. - Tôi nghĩ rằng nó trông 'đẹp hơn' và dễ đọc hơn.
Những lý do tôi không thích nó:
- Đôi khi có một số vấn đề với các phụ thuộc - nếu bạn muốn nhúng, giả sử,
Lorem::vector
trong một lớp khác nhưng chỉ cần (hoặc muốn) chuyển tiếp khai báo Lorem (trái ngược với việc giới thiệu một phụ thuộc vào tệp tiêu đề của nó) thì cuối cùng bạn phải sử dụng loại rõ ràng (ví dụboost::shared_ptr<Lorem>
chứ không phảiLorem::ptr
), đó là một chút không nhất quán. - Nó có thể không phổ biến lắm, và do đó khó hiểu hơn?
Tôi cố gắng khách quan với phong cách mã hóa của mình, vì vậy sẽ rất tốt nếu có một số ý kiến khác về nó để tôi có thể mổ xẻ suy nghĩ của mình một chút.