把private聲明從.h文件移到.cpp文件
(轉(zhuǎn)載請(qǐng)注明來源于金慶的專欄)
在*.h文件中定義一個(gè)類時(shí),理論上應(yīng)該僅定義其公共接口,而不必聲明其私有的成員,因?yàn)樗接械某蓡T屬于實(shí)現(xiàn)部分,理應(yīng)聲明在.cpp文件中。
可是現(xiàn)有的C++標(biāo)準(zhǔn)是不支持將一個(gè)類的定義分到兩個(gè)文件中去的。
有一個(gè)pimpl模式,可以變相完成這個(gè)要求,只暴露公共接口,而實(shí)現(xiàn)定義為私有。pimpl 即 private implemention 的縮寫。不光封裝性好,還可以減少頭文件依賴,提高編譯速度。
例如:(來自:關(guān)于handle-body的用法及l(fā)oki::PimplT的分析 )
/*.h*/
class CTest
{
public:
void Test();
private:
Loki::PimplT::Type m_impl;
};
/*.cpp*/
template<>
struct Loki::ImplT
{
public:
void Test() { std::cout << "test" << std::endl; }
};
void CTest::Test() { return m_impl->Test(); }
(轉(zhuǎn)載請(qǐng)注明來源于金慶的專欄)
在*.h文件中定義一個(gè)類時(shí),理論上應(yīng)該僅定義其公共接口,而不必聲明其私有的成員,因?yàn)樗接械某蓡T屬于實(shí)現(xiàn)部分,理應(yīng)聲明在.cpp文件中。
可是現(xiàn)有的C++標(biāo)準(zhǔn)是不支持將一個(gè)類的定義分到兩個(gè)文件中去的。
有一個(gè)pimpl模式,可以變相完成這個(gè)要求,只暴露公共接口,而實(shí)現(xiàn)定義為私有。pimpl 即 private implemention 的縮寫。不光封裝性好,還可以減少頭文件依賴,提高編譯速度。
例如:(來自:關(guān)于handle-body的用法及l(fā)oki::PimplT的分析 )
/*.h*/
class CTest
{
public:
void Test();
private:
Loki::PimplT::Type m_impl;
};
/*.cpp*/
template<>
struct Loki::ImplT
{
public:
void Test() { std::cout << "test" << std::endl; }
};
void CTest::Test() { return m_impl->Test(); }