<分区>
你能给我一个提示吗,如何使这段代码按我想要的方式工作?我希望 derived_t
是 Derived
,但它始终是 Base
。
#include <iostream>
#include <string>
#include <memory>
struct Base {
virtual std::string me() { return "Base"; }
};
struct Derived : Base {
virtual std::string me() override { return "Derived"; }
};
void foo(std::shared_ptr<Base> ptr) {
using derived_raw_t = decltype(*ptr);
using derived_t = std::remove_reference<derived_raw_t>::type;
derived_t* x = new derived_t();
std::cout << x->me() << std::endl;
}
int main() {
std::shared_ptr<Base> ptr = std::make_shared<Base>(Derived());
foo(ptr);
}