- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我从 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并保留在标题中。
要了解拆分类的基本原理,请查看here和 here .要了解不这样做背后的理由,请查看 here .不拆分前两个的一个原因是,这样您就不必链接任何东西来使用该类。您只需要包含标题。希望这能给你一个起点。
关于c++ - 将代码拆分为头文件/源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2584856/
我有一个数组列表: ArrayList allText = new ArrayList(); 其内容是这样的: [Alabama - Montgomery, Alaska - Juneau, Ariz
我有一个 timestamp 格式的开始和结束时间。我想将它们分成多个时间段,例如 1 小时。 $t1 = strtotime('2010-05-06 12:00:00'); $t2 = strtot
我需要将 span10 分成 3 列,但我无法将它们排列起来。我应该在 span10 中添加一个 span12 还是使用 offset 还是??
我有一个时间序列。我想从早上 8 点到第二天早上 7:59 分成 24 小时的区 block 。我知道如何按日期分组,但我尝试过使用 TimeGroupers 和 DateOffsets 处理这个 8
我收到“街道号码邮政编码城市”形式的地址(作为字符串)。我想要做的是将街道和号码与邮政编码和城市分开。通常你可以按空格分割。但有些街道名称中也有空格,例如:“Emile Van Ermengemlaa
我有一个用户列表。其中一些用户处于第一状态,而其他用户处于第二状态。所以我想要的是将这个列表显示为首先,它按排序顺序显示存在 = 1 的用户,然后按排序顺序显示存在 = 2 的用户。这里的排序是根据用
我感觉我搜索了整个网络,但找不到一种方法将不同高度的 div 很好地划分为 3 列,就像 http://www.ing.nl 上那样 headertekst headerteksttesth
Bootstrap 3 按钮下拉菜单出现问题。你可以在这里看到我的两个例子: http://www.bootply.com/W1dLusilMk http://www.bootply.com/GGBv
我在 php 中执行以下操作 foreach($QuestionAsekd as $k => $v){ $grp_name = $v['NAME']; $groupValues[$gr
我找到了一种用pandas解析html的绝妙方法。我的数据格式有点奇怪(见下文)。我想将这些数据拆分为 2 个单独的数据帧。 注意每个单元格如何由,分隔...是否有任何真正有效的方法来分割所有这些单元
HTML 看起来像这样,但我不允许对其进行更改。我只能编写 CSS 将其变成 2 列。 Povezave www.behance.net www.kiberpipa.org www.o
假设我有以下数据框“A” utilization utilization_billable service 1
我需要将 2 个文本框拉伸(stretch)到 100% 的浏览器宽度,以及一个提交按钮。所有三个都应该在一行中,我试图拉伸(stretch)它但它没有发生......有什么想法吗? 代码: .sea
我是一名优秀的程序员,十分优秀!