gpt4 book ai didi

c++ - 将代码拆分为头文件/源文件

转载 作者:太空狗 更新时间:2023-10-29 23:10:02 27 4
gpt4 key购买 nike

我从 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++ 感到困惑的地方。

最佳答案

拆分它看起来像这样:

// in the header-file
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);
tcp::socket& socket();
void start();
private:
tcp_connection(boost::asio::io_service& io_service);
void handle_write(const boost::system::error_code& /*error*/,
size_t /*bytes_transferred*/);

tcp::socket socket_;
std::string message_;
};

// in the cpp-file

// #using the namespace in which the class was declared here

tcp_connection::pointer tcp_connection::create(boost::asio::io_service& io_service)
{
return pointer(new tcp_connection(io_service));
}

tcp::socket& tcp_connection::socket()
{
return socket_;
}

void tcp_connection::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));
}

tcp_connection::tcp_connection(boost::asio::io_service& io_service)
: socket_(io_service)
{
}

void tcp_connection::handle_write(const boost::system::error_code& /*error*/,
size_t /*bytes_transferred*/)
{
}

基本上,所有方法实现都已移至 cpp 文件中。 typedef boost::shared_ptr<tcp_connection> pointer; defines an alias for a type并保留在标题中。

要了解拆分类的基本原理,请查看herehere .要了解不这样做背后的理由,请查看 here .不拆分前两个的一个原因是,这样您就不必链接任何东西来使用该类。您只需要包含标题。希望这能给你一个起点。

关于c++ - 将代码拆分为头文件/源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2584856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com