Splitting Code into Headers/Source files
- by cam
I took the following code from the examples page on 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_;
};
I'm relatively new to C++ (from a C# background), and from what I understand, most people would split this into header and source files (declaration/implementation, respectively).  Is there any reason I can't just leave it in the header file if I'm going to use it across many source files? If so, are there any tools that will automatically convert it to declaration/implementation for me? Can someone show me what this would look like split into header/source file for an example (or just part of it, anyway)?  I get confused around weird stuff like thistypedef boost::shared_ptr<tcp_connection> pointer;  Do I include this in the header or the source? Same with tcp::socket& socket()
I've read many tutorials, but this has always been something that has confused me about C++.