推断成员的模板类型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>();
而且它的可读性似乎也较差。
对于这两者,容易出错的击键由编译器指出:-)
所以,想来想去,这个(
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>();
而且它的可读性似乎也较差。
对于这两者,容易出错的击键由编译器指出:-)