Създавам 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, например?