Sesuatu yang saya temukan sering saya lakukan belakangan ini adalah menyatakan typedefs relevan dengan kelas tertentu di dalam kelas itu, yaitu
class Lorem
{
typedef boost::shared_ptr<Lorem> ptr;
typedef std::vector<Lorem::ptr> vector;
//
// ...
//
};
Jenis-jenis ini kemudian digunakan di tempat lain dalam kode:
Lorem::vector lorems;
Lorem::ptr lorem( new Lorem() );
lorems.push_back( lorem );
Alasan saya menyukainya:
- Ini mengurangi kebisingan yang diperkenalkan oleh templat kelas,
std::vector<Lorem>
menjadiLorem::vector
, dll. - Ini berfungsi sebagai pernyataan niat - dalam contoh di atas, kelas Lorem dimaksudkan untuk menjadi referensi yang dihitung melalui
boost::shared_ptr
dan disimpan dalam vektor. - Hal ini memungkinkan implementasi untuk berubah - yaitu jika Lorem perlu diubah untuk menjadi referensi intrusively dihitung (via
boost::intrusive_ptr
) pada tahap selanjutnya maka ini akan memiliki dampak minimal pada kode. - Saya pikir ini terlihat lebih cantik dan lebih mudah dibaca.
Alasan saya tidak menyukainya:
- Kadang-kadang ada masalah dengan dependensi - jika Anda ingin menanamkan, katakanlah,
Lorem::vector
dalam kelas lain tetapi hanya perlu (atau ingin) untuk meneruskan mendeklarasikan Lorem (sebagai lawan memperkenalkan dependensi pada file header-nya) maka Anda akhirnya harus menggunakan tipe eksplisit (misalnya,boost::shared_ptr<Lorem>
bukanLorem::ptr
), yang sedikit tidak konsisten. - Mungkin tidak terlalu umum, dan karenanya lebih sulit untuk dipahami?
Saya mencoba untuk bersikap objektif dengan gaya pengkodean saya, jadi akan lebih baik untuk mendapatkan beberapa pendapat lain tentangnya sehingga saya dapat membedah pemikiran saya sedikit.