Deduce成员shared_ptr的模板类型

时间:2015-11-03 22:35:22

标签: c++ templates shared-ptr auto

所以,在经过多次思考之后,这个(Deduce template parameter from member variable in constructor)不是我要问的问题,所以这里就是这样。让它变得更简单一些。假设我有像

这样的情况
shared_ptr<SomeType> myPtr;
// ...
myPtr = make_shared<SomeType>();

问题:在编译或运行时,是否有办法根据SomeType的类型找出myPtr?我很欣赏在这种情况下我可以完成

auto myPtr = make_shared<SomeType>();

并为自己省去了几次击键,但请考虑以下几点:

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用

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

但它不能保存打字

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

它似乎也不太可读。

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

答案 1 :(得分:-2)

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

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