Я взял следующий код со страницы примеров на Asio
class tcp_connection : public boost::enable_shared_from_this<tcp_connection>
{
public:
typedef boost::shared_ptr<tcp_connection> pointer;
static pointer create(boost::asio::io_service& io_service)
{
return pointer(new tcp_connection(io_service));
}
tcp::socket& socket()
{
return socket_;
}
void start()
{
message_ = make_daytime_string();
boost::asio::async_write(socket_, boost::asio::buffer(message_),
boost::bind(&tcp_connection::handle_write, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
private:
tcp_connection(boost::asio::io_service& io_service)
: socket_(io_service)
{
}
void handle_write(const boost::system::error_code& /*error*/,
size_t /*bytes_transferred*/)
{
}
tcp::socket socket_;
std::string message_;
};
Я относительно новичок в C ++ (из опыта C #), и, насколько я понимаю, большинство людей разделят это на заголовочные и исходные файлы (объявление / реализация, соответственно). Есть ли причина, по которой я не могу просто оставить его в заголовочном файле, если собираюсь использовать его во многих исходных файлах? Если так, есть ли инструменты, которые автоматически преобразуют его в декларацию / реализацию для меня? Может кто-нибудь показать мне, как это будет выглядеть в качестве примера для разбивки на заголовок / исходный файл (или, во всяком случае, на его часть)? Я запутался в таких странных вещах, как это typedef boost::shared_ptr<tcp_connection> pointer;
Я включил это в заголовок или в источник? То же самое с tcp::socket& socket()
Я прочитал много уроков, но это всегда меня смущало в C ++.