私はすでに自分の問題について尋ねましたが、今は次のステップにいます。以下のコードでは、常に EventHandler (Server::HandleMessage) を静的にしなければならないという問題があります。ただし、Handler 内から Server クラスの他の変数にアクセスするには、非静的にする必要があります。
どうすればこれを達成できますか?
ここに私のコード:
#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) は初めてです。