推导成员shared_ptr的模板类型

Deduce the template type of a member shared_ptr

本文关键字:类型 ptr 成员 shared      更新时间:2023-10-16

所以,经过深思熟虑,这(从构造函数中的成员变量推导模板参数)不是我要问的问题,所以这里开始。让我们再简单一点。假设我遇到类似的情况

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(如果不将其设置为静态的话)。那么,再一次:有没有办法避免所有这些多余的、容易出错的键击?

您可以使用

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

但这并不能节省针对的打字

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

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

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

如果是MyClass,你能做吗:

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