在一个项目中,我们想要以某种方式包装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