class Base : public std::enable_shared_from_this<Base> {
public:
template<class T>
requires std::is_base_of_v<Base, T>
std::shared_ptr<T> shared_from_this_cast() {
return std::static_pointer_cast<T>(shared_from_this());
}
template<class T>
requires std::is_base_of_v<Base, T>
std::shared_ptr<const T> shared_from_this_cast() const {
return std::static_pointer_cast<const T>(shared_from_this());
}
virtual void call() {
std::cout << "Base" << std::endl;
}
virtual void process() = 0;
};
class A : public Base {
void call() override {
std::cout << "A" << std::endl;
}
void process() override {
auto ptr = shared_from_this_cast<A>();
auto task = [ptr]() { ptr->task_only_A(); };
//asio::post(context, task);
}
void task_only_A() {}
};
class B : public Base {
void call() override {
std::cout << "B" << std::endl;
}
void process() override {
auto ptr = shared_from_this_cast<B>();
auto task = [ptr]() {ptr->task_only_B(); };
//asio::post(context, task);
}
void task_only_B() {}
};
类似上面这种,因为要异步调用 各个子类的特有task函数,而且子类要shared_from_this() , 所以在函数都要
shared_from_this_cast<>,静态指定转化的类
希望子类具有多态,但是又是必须编译转为静态,有点脱屁股放屁的感觉,明明都是自己的业务逻辑,直接分开各个类,不继承好像也可以。因为有个父类,这里 父类纯粹就是 规划一些 统一的接口罢了。
--
修改:Algoquant FROM 14.154.47.*
FROM 14.154.47.*