推断成员的模板类型shared_ptr

Deduce the template type of a member shared_ptr

所以,想来想去,这个()不是我要问的问题,就这样吧。让我们让它更简单一点。假设我有这样的情况

shared_ptr<SomeType> myPtr;
// ...
myPtr = make_shared<SomeType>();

问题:是否有一种方法可以在编译时或 运行 时根据 myPtr 的类型计算出 SomeType?我很感激在这种情况下我本可以完成

auto myPtr = make_shared<SomeType>();

并节省了几次击键,但请考虑以下几点:

class MyClass {
    shared_ptr<SomeType> _memberName;
public:
    void setup();
};

其中 setup() 在构造实例后调用,并创建该指针。在这种情况下,我不能将一个成员声明为 auto(似乎没有使其成为静态的)。所以,再一次:有没有办法避免所有这些冗余和容易出错的击键?

如果是 MyClass,你可以这样做吗:

template<typename T> {
class MyClass {
    shared_ptr<T> _memberName;
public:
    void setup();
};

您可以使用

_memberName = std::make_shared<decltype(_memberName)::element_type>();

但它并不能节省输入

_memberName = std::make_shared<SomeType>();

而且它的可读性似乎也较差。

对于这两者,容易出错的击键由编译器指出:-)