в проекте, который мы хотим обернуть сокет Boost Asio таким образом, чтобы используемый класс или обертывание .h не включали заголовки boost.Можно ли обмотать розетки с помощью Pimpl?
Обычно мы используем указатели и форвардные объявления для обернутых классов.
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
Зависит от того, что имеет смысл. Обычно я использую класс pimpl как ведомый элемент данных (также он обычно является структурой), к которому осуществляется хост-класс точно так же, как если бы он был собственным. Но я ленив. :) – Eugene
janm ниже говорит о том же самом BTW. – Eugene