我可以创建课堂功能类型吗?
Can i create in-class function types?
我正在从一个小型项目上工作,其中包含简单的服务器,该服务器会听到消息。
假设我们有以下类:
class Message;
class Server
{
void handler1(Message msg);
void handler2(Message msg);
.
.
.
void handler19(Message msg);
};
我可以创建返回void
的类Server
的新功能类型,并获得一个称为MSG的单个Message
变量:
typedef void(Server::*MessageHandler)(Message msg);
,类声明为:
class Server
{
MessageHandler handler1;
.
.
.
MessageHandler handler19;
}
所述的一件事将带有sqlite3回调函数(其中函数声明不是最清洁的)。
如果可能的话,如何实现此类功能?
如果不可能,是否有任何类似的方法使代码更简单(例如C#委托)?
预先感谢您!
代码:
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
可以使用任何Message
并返回void
的Server
方法重新分配。但是必须先在首次使用之前对其进行初始化;类似:handler = handler1
此时呼叫handler
将是对handler1
的调用。但是handler
然后可以随意重新分配,例如,如果您这样做:handler = handler2
此时呼叫handler
将是呼叫handler2
。
我不确定您是否理解,但是handler
从未定义一种方法;只有一个指针。
给定Server
的定义:
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 ? "truen" : "falsen"); }
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;
}
}
};
您可以执行以下操作:
Server foo;
for (auto i = 'A'; i <= 'Z'; ++i) {
foo.next();
foo.handler_(foo, i);
}
实时示例
相关文章:
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- C++从成员类型中扣除类型的功能模板?
- 这种错误的原因是什么:将"功能"重新定义为不同类型的符号
- 模板功能:根据类型名称进行转换
- 如何在同一个模板功能上专门化几种类型?
- 错误:未知类型名称"功能跟踪"
- 我对C 中共享指针列表进行排序的功能未完成类型
- 共享_ptr中多功能数组的类型是什么
- 确定功能主体中的返回类型
- 返回类型不可知模板类成员功能
- 类型推论模板功能返回类型
- C 功能模板指定第二个模板参数类型
- 为什么指定数据类型而不是构造功能参数?C
- C 尝试使用模板输出功能来显示不同类型的数据
- 为什么BOOST :: HANA :: EXAREMIS ::键入实验功能?类型列表的棘手是什么
- 将多种类型传递给STD ::功能C
- C 中此功能的返回类型的含义
- C++ 使用包含不同类型功能对象的基和派生类的 Reactor
- 请求从非标量类型转换为非标量类型(功能)