在一個項目中,我們想要以某種方式包裝Boost Asio套接字,使用類或包裝.h不必包含boost頭文件。是否可以用Pimpl封裝boost套接字?
我們通常使用包裝類的指針和轉發聲明。
FOWARD聲明:
namespace boost
{
namespace asio
{
namespace ip
{
class udp;
}
}
}
然後宣佈插座:
scoped_ptr<boost::asio::ip::udp::socket> socket_;
scoped_ptr<boost::asio::ip::udp::endpoint> receiveEp_;
(如果你不知道scoped_ptr的,忽略它,這個問題是一個標準的*指針相等)。
但是,這給出了一個編譯器錯誤:
error C2027: use of undefined type 'boost::asio::ip::udp'
我明白這是因爲udp實際上不是一個命名空間,而是一個類本身。我們只想使用內部類,任何想法?
也就是說,我將不得不定義所有的公共職能兩次..和SomeClass的將簡單地把它們傳遞給pimpl_bla ? – Tarnschaf 2009-10-28 03:47:43
取決於什麼是有道理的。我通常使用pimpl類作爲數據成員存儲桶(也通常是一個結構體),它們可以通過與宿主類完全相同的方式訪問,就像它們是它自己的一樣。但我很懶。 :) – Eugene 2009-10-28 04:32:02
下面談談完全相同的事情順便說一句。 – Eugene 2009-10-28 04:33:32