问题:
对于这样的场景:对于一些CS(客户端-服务端)模型,当用户在客户端传入相应的事件时,我们需要实现框架即在服务端去分配线程处理这些事件,即调用用户的事件处理函数,那么对于不同的用户的事件函数,如何统一在服务端进行处理呢,那么容易想到的一个方法就是多态,如下:
class Task // 服务端实现的
{
public:
Task();
~Task() = default;
// 用户可以自定义任意任务类型,从Task继承,重写run方法,实现自定义任务处理
virtual Any run() = 0;
};
class MyTask : public Task //用户端想要处理的事件
{
public:
MyTask(int begin, int end)
{}
Any run()
{
... //用户的事件
return sum; //处理的结果返回
}
};
此时服务端,就可以调用派生类的run方法实现用户的事件了,此时问题就出现了,那么用户如何获取事件处理的返回结果呢,要知道多态重写的是同名函数,包括返回值,所以我们需要一个统一的Any类型接收任意类型的参数返回,如int、string、vector等,如上所示
ps:模板和继承无法共存,也就是不能给run方法添加模返回参数,只能使用自定义的Any类型接收所有的返回类型。
简要来说,我需要一个统一类型接收所有类型&