C++ 我可以创建类内函数类型吗?
我正在做一个小项目,其中包含一个简单的服务器,可以监听消息 假设我们有以下类别:C++ 我可以创建类内函数类型吗?,c++,function,C++,Function,我正在做一个小项目,其中包含一个简单的服务器,可以监听消息 假设我们有以下类别: class Message; class Server { void handler1(Message msg); void handler2(Message msg); . . . void handler19(Message msg); }; 我是否可以创建一个类Server的新函数类型,该函数类型返回void,并获取一个名为msg的Message变量,如下所
class Message;
class Server
{
void handler1(Message msg);
void handler2(Message msg);
.
.
.
void handler19(Message msg);
};
我是否可以创建一个类Server
的新函数类型,该函数类型返回void
,并获取一个名为msg的Message
变量,如下所示:
typedef void(Server::*MessageHandler)(Message msg);
因此,类声明将是:
class Server
{
MessageHandler handler1;
.
.
.
MessageHandler handler19;
}
前面提到的一件事对于sqlite3回调函数(函数声明不是最干净的)来说很方便
如果可能的话,我如何实现这样的功能
如果这是不可能的,有没有类似的方法使代码更简单(比如C#delegate)
提前谢谢你 对于代码:
class Server {
void handler1(Message msg); // This declares a method named handler one which takes a Message and returns void
void(Server::*handler)(Message); // This declares a member variable named handler of the type Server method pointer to a method that takes a Message and returns a void
};
处理程序
可以使用任何服务器
方法重新分配,该方法接受消息
并返回无效
。但在首次使用之前必须对其进行初始化;类似于:handler=handler1
此时,调用handler
就是调用handler1
。但是handler
可以随意重新分配,例如,如果您这样做:handler=handler2
此时对handler
的调用将是对handler2
的调用
从你的问题中我不确定你是否理解,但是handler
从未定义过方法;只有一个指向一个的指针
给出了服务器的定义:
class Server {
void Handler1(int param) { cout << param + 1 << endl; }
void Handler2(int param) { cout << (param << 1) << endl; }
void Handler3(int param) { cout << (param != 0 ? "true\n" : "false\n"); }
void Handler4(int param) { cout << static_cast<char>(param + 'A') << endl; }
public:
function<void(Server, int)> handler_;
void next() {
if (!handler_ || *handler_.target<void (Server::*)(int)>() == &Server::Handler4) {
handler_ = &Server::Handler1;
} else if(*handler_.target<void (Server::*)(int)>() == &Server::Handler1) {
handler_ = &Server::Handler2;
} else if (*handler_.target<void (Server::*)(int)>() == &Server::Handler2) {
handler_ = &Server::Handler3;
} else {
handler_ = &Server::Handler4;
}
}
};
类服务器{
代码的void Handler1(int param){cout:
class Server {
void handler1(Message msg); // This declares a method named handler one which takes a Message and returns void
void(Server::*handler)(Message); // This declares a member variable named handler of the type Server method pointer to a method that takes a Message and returns a void
};
处理程序
可以通过任何服务器
方法重新分配,该方法接受消息
并返回void
。但它必须在首次使用之前进行初始化;类似于:handler=handler1
此时对handler
的调用将是对handler1
的调用。但是处理程序然后可以随意重新分配代码>,例如,如果您这样做:handler=handler2
此时调用handler
就是调用handler2
从你的问题中我不确定你是否理解,但是handler
从来没有定义过一个方法;只有指向一个方法的指针
给出了服务器的定义:
class Server {
void Handler1(int param) { cout << param + 1 << endl; }
void Handler2(int param) { cout << (param << 1) << endl; }
void Handler3(int param) { cout << (param != 0 ? "true\n" : "false\n"); }
void Handler4(int param) { cout << static_cast<char>(param + 'A') << endl; }
public:
function<void(Server, int)> handler_;
void next() {
if (!handler_ || *handler_.target<void (Server::*)(int)>() == &Server::Handler4) {
handler_ = &Server::Handler1;
} else if(*handler_.target<void (Server::*)(int)>() == &Server::Handler1) {
handler_ = &Server::Handler2;
} else if (*handler_.target<void (Server::*)(int)>() == &Server::Handler2) {
handler_ = &Server::Handler3;
} else {
handler_ = &Server::Handler4;
}
}
};
类服务器{
void Handler1(int-param){我不认为这是一个特别好的主意。如果您可以访问C++11,您可以尝试以下内容:我不认为这是一个特别好的主意。如果您可以访问C++11,您可以尝试以下内容: