b***i 发帖数: 3043 | 1 有一个类,TCPServer{
public: TCPServer(asio::io_service& io_service, const tcp::endpoint& listen_
endpoint){...}
private:
asio::io_service& io_service_;
asio::ip::tcp::acceptor acceptor_;
TCPListener listener_;
};
这个类是boost的一个例子。我的代码需要三个变量,放在TCPServerManager里面,为
简单起见,我定义三个static变量。
TCPServerManager{
static TCPServer eth0, eth1, wifi;
static void start(){...}
};
那么,在start里面,我根据boost的例子,用TCPServer s(io_service, listen_
endpoint);定义了一个变量。怎么把这个变量变成我的eth0,eth1, wifi呢?
在定义eth0的那个地方,需要的listen_endpoint还没有好,就是说,需要后续的代码
(start)来完成listen_endpoint的赋值。
我是否需要eth0=std::move(s); 那样,我自己写TCPServer的move assignment怎么写
呢?虽然一共三个变量,还是需要请教懂行的。
另外,我是否可以使用TCPServer *eth0=new TCPServer(.) 这样可以在start函数里
面执行。算是另外一种方法吧。 |
l*********s 发帖数: 5409 | |
k****e 发帖数: 2758 | 3 文科生?
listen_
【在 b***i 的大作中提到】 : 有一个类,TCPServer{ : public: TCPServer(asio::io_service& io_service, const tcp::endpoint& listen_ : endpoint){...} : private: : asio::io_service& io_service_; : asio::ip::tcp::acceptor acceptor_; : TCPListener listener_; : }; : 这个类是boost的一个例子。我的代码需要三个变量,放在TCPServerManager里面,为 : 简单起见,我定义三个static变量。
|
B*******g 发帖数: 1593 | 4 能不能从heap move到static我不确定, 但你这个s不是rvalue, compiler不会让move吧
? 你的三个变量不能直接初始化吗? 为什么一定要从另一个变量copy/move?
又看了下, 应该可以写move constructor和move assignment operator
listen_
【在 b***i 的大作中提到】 : 有一个类,TCPServer{ : public: TCPServer(asio::io_service& io_service, const tcp::endpoint& listen_ : endpoint){...} : private: : asio::io_service& io_service_; : asio::ip::tcp::acceptor acceptor_; : TCPListener listener_; : }; : 这个类是boost的一个例子。我的代码需要三个变量,放在TCPServerManager里面,为 : 简单起见,我定义三个static变量。
|
b***i 发帖数: 3043 | 5 程序运行中途,要修改某个IP地址,或者port
比如,系统有三个以太网:eth0, eth1, wifi, 只有eth0的地址和端口是固定的,其
他的由应用程序通过和客户的交流来设定。如果客户要改,这个变量就要重新赋值。
更改就发生在handle_read里面,例子:如果包的内容是: set eth1 ip=...... port =
....
那么这里就呼叫对应的函数来关掉相应的eth1的io_service,然后用新的IP地址和端口
重新生成新的。
【在 B*******g 的大作中提到】 : 能不能从heap move到static我不确定, 但你这个s不是rvalue, compiler不会让move吧 : ? 你的三个变量不能直接初始化吗? 为什么一定要从另一个变量copy/move? : 又看了下, 应该可以写move constructor和move assignment operator : : listen_
|
n**n 发帖数: 626 | 6 1) Can we use TCPServer* eth0 instead of TCPServer eth0? then maybe we can
create and record heap memory object in start() after "listen_endpoint". I
don't see the need of keeping a TCPServer object inside.
2) Why should we use static member TCPServer eth0 here? Are there many
TCPServerManager objects? |
l*********s 发帖数: 5409 | 7 because there is no pointer in java. : -)
【在 n**n 的大作中提到】 : 1) Can we use TCPServer* eth0 instead of TCPServer eth0? then maybe we can : create and record heap memory object in start() after "listen_endpoint". I : don't see the need of keeping a TCPServer object inside. : 2) Why should we use static member TCPServer eth0 here? Are there many : TCPServerManager objects?
|
n**n 发帖数: 626 | 8 oh, isn't the title saying c++11?
【在 l*********s 的大作中提到】 : because there is no pointer in java. : -)
|
b***i 发帖数: 3043 | 9 用指针可以,我现在就这么用的。不是为了新潮吗?
为什么是静态变量,是因为这个系统一共一个TCPServerManager,负责管理所有的
server变量。所以,是个singleton。当然,我可以用singleton那一套,不过直接
static也行吧?不行就不是静态变量的,但是通过getInstance()来访问。
【在 n**n 的大作中提到】 : 1) Can we use TCPServer* eth0 instead of TCPServer eth0? then maybe we can : create and record heap memory object in start() after "listen_endpoint". I : don't see the need of keeping a TCPServer object inside. : 2) Why should we use static member TCPServer eth0 here? Are there many : TCPServerManager objects?
|
n**n 发帖数: 626 | 10 I don't quite understand the relation between singleton manager object
and static member variables.
singleton of manager class is usually implemented using a getServer() method
, while static member variable is more like a global variable under a class
name.
btw, I never see such 新潮.
[在 bihai (学得不好) 的大作中提到:]
:有一个类,TCPServer{
:public: TCPServer(asio::io_service& io_service, const tcp::endpoint&
listen_endpoint){...}
:........... |
b***i 发帖数: 3043 | 11 前面有人说了heap到static不可行。这个可能是个问题。而我开始问的其实是从stack
到static。估计也不行。
所以,取决于io_service的实现,如果所有内部的变量都在heap上,可以简单的转移,
自己写个move constructor。如果都在stack上,就不可以吧。
用singleton我想就把变量放在heap上了。不过,还是不能从stack到heap。
method
class
【在 n**n 的大作中提到】 : I don't quite understand the relation between singleton manager object : and static member variables. : singleton of manager class is usually implemented using a getServer() method : , while static member variable is more like a global variable under a class : name. : btw, I never see such 新潮. : [在 bihai (学得不好) 的大作中提到:] : :有一个类,TCPServer{ : :public: TCPServer(asio::io_service& io_service, const tcp::endpoint& : listen_endpoint){...}
|