3,881
社区成员
发帖
与我相关
我的任务
分享
template<class T>
class Socket : public std::enable_shared_from_this<T>
/*
这种使用enable_shared_from_this的方式正确么???
class Socket : public std::enable_shared_from_this<Socket> //T另外处理
*/
{
//.....
private:
tcp::socket _socket; //boost
MessageBuffer _readBuffer; // other class
public:
void ReadHandlerInternal(boost::system::error_code error, size_t transferredBytes)
{
if (error)
{
CloseSocket();
return;
}
_readBuffer.WriteCompleted(transferredBytes);
ReadHandler();
}
void AsyncReadWithCallback(void (T::*callback)(boost::system::error_code, std::size_t))
{
if (!IsOpen())
return;
_readBuffer.Normalize();
_readBuffer.EnsureFreeSpace();
_socket.async_read_some(boost::asio::buffer(_readBuffer.GetWritePointer(), _readBuffer.GetRemainingSpace()),
std::bind(callback, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2));
/*
这里能够理解 传入的是T的成员函数 所以指针也是shared_from_this
*/
}
void AsyncRead()
{
if (!IsOpen())
return;
_readBuffer.Normalize();
_readBuffer.EnsureFreeSpace();
_socket.async_read_some(boost::asio::buffer(_readBuffer.GetWritePointer(), _readBuffer.GetRemainingSpace()),
std::bind(&Socket<T>::ReadHandlerInternal, this->shared_from_this(), std::placeholders::_1, std::placeholders::_2));
/*
这里为什么不是传入Socket的指针
*/
}
};
template<typename T>
struct A
{
void foo(){}
};
template<typename T>
struct B : public A<T>
{
void a()
{
this->foo(); //OK
//foo(); 编译错误
}
};
class Socket : public std::enable_shared_from_this<Socket<T>>