C++ 事件处理 - 与常量有关的问题
C++ Event Handling - issue with const
我已经问过我的问题,现在我正在下一步。在下面的代码中,我遇到了一个问题,即我总是必须使事件处理程序(服务器::HandleMessage)成为静态的。但是我需要让它非静态才能从处理程序中访问服务器类中的其他变量。
我怎样才能做到这一点?
这是我的代码:
#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)的新手。
我很
确定这就是你所追求的。在以您似乎想要的方式通过std::function
调用指向成员的指针时,您需要显式绑定隐式this
。
#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;
};
Client(){}
void FireEvent()
{
this->onMessageReceive(MessageReceiveArgs(16, "SomeText"));
}
std::function<void(MessageReceiveArgs)> onMessageReceive;
};
class Server
{
public:
int i;
Server()
{
this->client.onMessageReceive
= std::bind(&Server::HandleMessage, this, std::placeholders::_1);
this->i = 5;
}
void FireEvent()
{
this->client.FireEvent();
}
Client client;
void HandleMessage(Client::MessageReceiveArgs args)
{
std::cout<<"ID "<<args.ID<<": "<<" "<<args.Text<<std::endl;
}
};
int main()
{
Server sv = Server();
sv.FireEvent();
}
输出
ID 16: SomeText
相关文章:
- constexpr构造函数需要常量成员函数时出现问题
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- C++中的指针和常量问题不大
- 当成员值从指针更改为非指针时,C++常量问题
- 常量公共成员有什么问题?
- 生成提升::hana::set 的常量表达式问题
- Visual Studio 2017 中的 cpprestapi 问题找不到 POST/GET 常量
- 关于在需要常量表达式的上下文中使用的glvalue常量表达式的问题
- public:静态常量字符串声明/初始化问题
- C++继承和"常量"交互的问题
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 将 c++ 字符串转换为常量字符 * 时出现问题
- 推导模板化类参数的模板参数:常量问题
- C++:常量减少重复符号问题
- 常量迭代器的问题
- Win32 Atoi 问题无法将参数 1 从 'wchar_t [5]' 转换为常量字符 *
- 常量正确性和shared_ptr,一个设计问题
- 如何解决这个问题?非常量引用必须绑定到左值
- 结构内工会的常量成员的问题
- 常量对象和函数的问题