Một tùy chọn khác là sử dụng thành ngữ PIMPL , trong đó một phần của việc thực hiện cấu trúc là một con trỏ đến một loại khác. Hầu hết người dùng của lớp sẽ chỉ bao gồm tệp tiêu đề bình thường, trong đó việc triển khai là một con trỏ mờ. Các lớp cần truy cập vào dữ liệu riêng tư có thể bao gồm tiêu đề xác định loại khác và sử dụng giao diện mà nó cung cấp.
Đây là một mô hình phổ biến cho các lập trình viên C muốn chức năng giống như bạn bè. Theo tôi, nó cũng tập trung chặt chẽ hơn để suy nghĩ về việc phân tách các mối quan tâm (một nguyên tắc thiết kế nói chung tốt dẫn đến việc sử dụng lại mã trực giao) thay vì đóng gói (một kỹ thuật dành riêng cho OO rất hữu ích để thực hiện phân tách các mối quan tâm, nhưng cũng thường bị lạm dụng để quá phức tạp mọi thứ).
Nó có một lợi thế hơn so với bạn bè là nó hoàn toàn không kết bạn với bạn bè. Một số người có thể cho rằng đó là một bất lợi, vì bây giờ bất cứ ai cũng có thể "kết bạn" với lớp của bạn. Tôi nghĩ đó là một nỗi sợ hãi không đáng có, vì bạn vẫn làm cho mối quan hệ rõ ràng (bằng cách bao gồm tiêu đề). Nếu bạn sợ điều đó, bạn sợ khả năng của bạn (hoặc đồng nghiệp) trong việc đưa ra quyết định kiến trúc thông minh. Nhưng nếu sau này bạn không thể đưa ra những quyết định đúng đắn, tại sao friend
bây giờ bạn lại tin tưởng chính mình ?
Nó có một bất lợi về chi phí thời gian chạy. Bằng cách lưu trữ dữ liệu trong một con trỏ, bạn có độ kết hợp bộ đệm kém hơn và số lượng phân bổ nhiều hơn, và bạn cũng cần một hàm hủy để dọn sạch nó.