Je pris le code suivant à partir de la page d'exemples sur AsioCode Splitting dans des fichiers en-têtes/Source
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_;
};
Je suis relativement nouveau pour C++ (à partir d'un arrière-plan C#), et de ce que je comprends, la plupart des gens diviserait ceci en en-tête et en fichiers source (déclaration/implémentation, respectivement). Y at-il une raison pour laquelle je ne peux pas simplement le laisser dans le fichier d'en-tête si je vais l'utiliser dans de nombreux fichiers source? Si oui, y a-t-il des outils qui vont automatiquement le convertir en déclaration/implémentation pour moi? Quelqu'un peut-il me montrer à quoi cela ressemblerait divisé en en-tête/fichier source pour un exemple (ou juste une partie de celui-ci, de toute façon)? Je suis confus autour de choses étranges comme ça typedef boost::shared_ptr<tcp_connection> pointer;
Dois-je inclure cela dans l'en-tête ou la source? Idem avec tcp::socket& socket()
J'ai lu beaucoup de tutoriels, mais cela a toujours été quelque chose qui m'a rendu confus au sujet de C++.
Voir http://stackoverflow.com/questions/1001639/coding-c-without-headers-best-practices –