Giả sử tôi có lớp học như thế này (giản thể):Mẫu thiết kế này là gì? Làm thế nào để sử dụng nó?
class Foo_p;
class Foo
{
private:
Foo_p *p;
public:
Foo();
/* methods, etc... */
};
Lớp này là một phần của một API. Foo_p là tất cả các phần riêng của lớp, không phải là được khai báo trong lớp Foo như thường lệ, mà là trong một lớp được khai báo chuyển tiếp riêng biệt chỉ được sử dụng bởi triển khai cơ bản không hiển thị ở bên ngoài.
Tôi đã thấy mẫu này được sử dụng trong một vài dự án, có tên cho nó không?
Ngoài ra, làm cách nào để sử dụng nó đúng cách (ví dụ: an toàn ngoại lệ, v.v.)? Nên triển khai thực tế ở đâu? Trong lớp Foo, như thường lệ, chỉ sử dụng Foo_p để lưu trữ dữ liệu, hoặc trong lớp Foo_p với Foo chỉ là một trình bao bọc?
Đừng cả các tiêu đề và mức độ bảo vệ bình thường (public/private) "về cơ bản giấu việc thực hiện"? –
@Matthew: Thật không may, không. Bạn phải bao gồm các tiêu đề triển khai, thường có thể khó chịu khi chúng phụ thuộc vào ví dụ các tiêu đề của Windows, điều này rất đáng tiếc. – Puppy
@MatthewFlaschen: Có, nhưng chỉ theo nghĩa là bạn không thể truy cập nó, nhưng bạn vẫn có thể thấy * nó, khi nhìn vào mã. – bitmask