Я создаю библиотеку DLL, которая будет экспортировать некоторые функции для использования в других проектах C++. В моей библиотеке я использую предварительно скомпилированные заголовки, а также Boost ASIO. Однако я хочу знать, возможно ли содержать все вещи, связанные с ASIO, в самой библиотеке, чтобы другой программе не нужно было их включать. Например:
stdafx.h (библиотека):
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <WinSock2.h>
#include <iostream>
#include <string.h>
#pragma comment(lib, "ws2_32")
#include <boost/asio.hpp>
Client.h (библиотека):
#pragma once
#ifdef LIB_EXPORTS
#define LIB_API __declspec(dllexport)
#else
#define LIB_API __declspec(dllimport)
#endif
using boost::asio::ip::tcp;
namespace TestLib {
class Client {
boost::asio::io_service io_service_;
tcp::resolver resolver_;
tcp::socket socket_;
public:
LIB_API Client();
LIB_API bool Connect(const std::string& szHost, const std::string& szPort);
virtual ~Client();
};
}
Однако в моей программе, использующей эту библиотеку, я хочу иметь возможность включать Client.h без необходимости включать Boost ASIO. Поскольку я включаю этот заголовок без включения Boost ASIO, я получаю ошибки обо всех строках в Client.h, которые ссылаются на утилиты Boost, такие как оператор using и три закрытые переменные-члены.
Как мне создать библиотеку таким образом, чтобы моя другая программа должна была включать, например, только Client.h?