1
我已經問過我的問題,現在我在下一步。在下面的代碼中,我遇到了這個問題,我總是必須使EventHandler(Server :: HandleMessage)靜態。但我需要讓它不是靜態的,以便在Handler中訪問服務器類中的其他變量。C++事件處理 - 問題與const
我該如何做到這一點?
這裏我的代碼:
#include <iostream>
#include <functional>
using namespace std;
class Client{
public:
struct MessageReceiveArgs {
MessageReceiveArgs(int ID, const std::string& Text) : ID(ID), Text(Text) {}
int ID;
std::string Text;
};
std::function<void(MessageReceiveArgs)> onMessageReceive;
Client(){}
void FireEvent(){
this->onMessageReceive(MessageReceiveArgs(16, "SomeText"));
}
};
class Server{
public:
int i;
Server(){
this->client.onMessageReceive = &Server::HandleMessage;
this->i = 5;
}
void FireEvent(){
this->client.FireEvent();
}
Client client;
static void HandleMessage(Client::MessageReceiveArgs args) {
std::cout<<"ID "<<args.ID<<": "<<" "<<args.Text<<std::endl;
//need it non static
//std::cout<<"I: "<<this->i<<std::endl;
}
};
int main() {
Server sv = Server();
sv.FireEvent();
}
正如我以前的文章中提到,我是新來的標準C++(UNIX)。
注:保存自己的副本,構造函數;將'Text'作爲'const std :: string&'傳遞給'MessageReceiveArgs'。而這個:'this-> client = Client();'是沒用的。當你到達這個代碼時,'client'成員已經是默認構造的。這不是Java或C#。 – WhozCraig
已經改變,謝謝,但這並不能解決我的首發問題,你有一個想法嗎? –
是的,其實我是。你需要一個ptr-to-member和一個'this'作爲客戶端初始化或綁定函數的一部分;要麼會工作。老派前者,新派後者。除非有人在我之前到達那裏,否則我會試着寫點東西。 – WhozCraig