所以,在经过多次思考之后,这个(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
(不会使其成为静态,看起来似乎)。那么,再说一次:有没有办法避免所有那些冗余且容易出错的击键?
答案 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();
};