1
叫我用一個類來包裝的boost :: ASIO和我使用模板來定義委託:參考非靜態成員函數必須在模板類
template <class T>
struct Socket : public std::enable_shared_from_this<Socket<T>> {
explicit Socket<T>(T &delegate, const std::string &socket) : endpoint_{socket} {
socket_.reset(new asio::generic::stream_protocol::socket(service_));
socket_->connect(endpoint_, delegate_.error_code);
socket_->non_blocking(true);
}
void read() const noexcept {
std::vector<byte> bytes;
asio::async_read(*socket_, asio::buffer(bytes), asio::transfer_all(), delegate_.on_read);
}
virtual ~Socket<T>() noexcept = default;
private:
asio::io_service service_;
std::unique_ptr<asio::generic::stream_protocol::socket> socket_;
asio::local::stream_protocol::endpoint endpoint_;
T delegate_;
std::vector<byte> buffer_;
};
我的問題是,通過委託方法作爲處理程序asio::async_read
導致錯誤
參考非靜態成員函數必須被調用
有什麼合作正確的語法來做到這一點?
我不認爲你引用正確的信息。 – 2017-08-04 18:21:03
一個小問題,但在類體內,你可以參考'Socket',就像'Socket'一樣,例如在你的構造函數和析構函數中 –