Pilihan lain adalah menggunakan idiom PIMPL , di mana bagian dari implementasi struktur adalah pointer ke tipe lain. Sebagian besar pengguna kelas hanya akan menyertakan file header normal, di mana implementasinya adalah pointer buram. Kelas-kelas yang membutuhkan akses ke data pribadi dapat menyertakan header yang mendefinisikan tipe lain, dan menggunakan antarmuka yang disediakannya.
Ini pola umum untuk programmer C yang menginginkan fungsionalitas seperti teman. Menurut pendapat saya, ini juga lebih dekat pada pemikiran tentang pemisahan kekhawatiran (prinsip desain yang umumnya baik yang mengarah pada kode ortogonal yang dapat digunakan kembali) daripada enkapsulasi (teknik khusus OO yang berguna untuk menerapkan pemisahan kekhawatiran, tetapi juga sering disalahgunakan untuk terlalu rumit hal).
Ini memiliki keunggulan dibandingkan teman bahwa itu tidak memasangkan teman ke teman sama sekali. Beberapa orang mungkin mengklaim itu tidak menguntungkan, karena sekarang siapa pun dapat "berteman" dengan kelas Anda. Saya pikir itu adalah ketakutan yang tidak beralasan, karena Anda masih membuat hubungan eksplisit (dengan memasukkan tajuk). Jika Anda takut akan hal itu, Anda takut akan kemampuan Anda (atau rekan kerja) untuk membuat keputusan arsitektur yang cerdas. Tetapi jika Anda tidak bisa mengambil keputusan dengan benar nanti, mengapa Anda memercayai diri Anda sendiri friend
sekarang?
Ini memiliki kelemahan dari biaya runtime. Dengan menyimpan data dalam sebuah penunjuk, Anda memiliki koherensi cache yang lebih buruk dan jumlah alokasi yang lebih banyak, dan Anda juga membutuhkan destruktor untuk membersihkannya.