c – 使用指针隐藏实现(Pimpl成语)
发布时间:2020-12-16 07:53:06 所属栏目:百科 来源:网络整理
导读:是否有可能实现以下目的: x.hpp – 此文件包含在许多其他类中 class x_impl; //forward declareclass x { public: //methods... private: x_impl* impl_;}; x.cpp – 实现 #include conrete_xtypedef concrete_x x_impl; //obviously this doesn't work//im
是否有可能实现以下目的:
x.hpp – 此文件包含在许多其他类中 class x_impl; //forward declare class x { public: //methods... private: x_impl* impl_; }; x.cpp – 实现 #include <conrete_x> typedef concrete_x x_impl; //obviously this doesn't work //implementation of methods... 所以基本上,我希望用户包含文件x.hpp,但不知道conrete_x.hpp标题. 既然我只能用一个指针来使用concrete_x,而且只能作为一个私有数据成员使用,所以前端的声明应该足够让编译器知道有多少空间来准备它.它看起来很像着名的“pimpl成语”. 你可以帮我吗 PS.我不想使用一个void *并将其投射 解决方法
实际上,甚至可以完全隐藏用户:
// Foo.hpp class Foo { public: //... private: struct Impl; Impl* _impl; }; // Foo.cpp struct Foo::Impl { // stuff }; 我只想提醒你: >你需要写一个正确的析构函数 有一些方法可以使PIMPL自动化,代价是一些黑魔法(类似于std :: shared_ptr). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |