按照 chatgpt的说法,改为这样更好?
template<typename Derived>
class EnableSelfShared : public std::enable_shared_from_this<Derived> {
public:
std::shared_ptr<Derived> shared_from_this_cast() {
return std::static_pointer_cast<Derived>(this->shared_from_this());
}
std::shared_ptr<const Derived> shared_from_this_cast() const {
return std::static_pointer_cast<const Derived>(this->shared_from_this());
}
};
class Base : public EnableSelfShared<Base> {
public:
virtual void call() {
std::cout << "Base" << std::endl;
}
virtual void process() = 0;
};
class A : public Base {
public:
void call() override {
std::cout << "A" << std::endl;
}
void process() override {
auto ptr = std::static_pointer_cast<A>(shared_from_this_cast());
auto task = [ptr]() { ptr->task_only_A(); };
//asio::post(context, task);
}
void task_only_A() {}
};
class B : public Base {
public:
void call() override {
std::cout << "B" << std::endl;
}
void process() override {
auto ptr = std::static_pointer_cast<B>(shared_from_this_cast());
auto task = [ptr]() {ptr->task_only_B(); };
//asio::post(context, task);
}
void task_only_B() {}
};
--
修改:Algoquant FROM 14.154.47.*
FROM 14.154.47.*