构建本身是 shared_ptr 类型的模板化容器
constructing templated containers that are themselves shared_ptr types
我很难理解这个问题,可能是因为我不完全理解底层机制。
我有如下结构:
template <class T>
struct A {
int id;
T x;
}
此结构随后用作 shared_ptr:
的类型
typedef std::shared_ptr<A> A_ptr;
依次存储在地图中:
typedef unordered_map<int , A_ptr> AMap;
但是,当我编译时,出现以下错误:
> error: type/value mismatch at argument 1 in template parameter list
> for 'template<class _Tp> class std::shared_ptr' typedef
> std::shared_ptr<A> A_ptr;
我读过其他关于类似问题的帖子,但他们都建议在结构中创建 shared_ptr A。我试过这个,尽管我无法从逻辑上理解为什么它会帮助解决我的问题,但它不起作用。感谢任何帮助。
A
是模板的名称,不是class的名称。如果你要命名一个专业,你的 typedef
就可以了:
typedef std::shared_ptr<A<int>> A_int_ptr; // A<int> **is** a class
如果你想保持代码的通用性,你需要切换到使用别名模板而不是常规类型别名:
template<typename T>
using A_ptr = std::shared_ptr<A<T>>;
template<typename T>
using AMap = std::unordered_map<int , A_ptr<T>>;
现在一切都已正确模板化,实例化取决于您打算传递给 A
的类型 T
。
我很难理解这个问题,可能是因为我不完全理解底层机制。
我有如下结构:
template <class T>
struct A {
int id;
T x;
}
此结构随后用作 shared_ptr:
的类型typedef std::shared_ptr<A> A_ptr;
依次存储在地图中:
typedef unordered_map<int , A_ptr> AMap;
但是,当我编译时,出现以下错误:
> error: type/value mismatch at argument 1 in template parameter list
> for 'template<class _Tp> class std::shared_ptr' typedef
> std::shared_ptr<A> A_ptr;
我读过其他关于类似问题的帖子,但他们都建议在结构中创建 shared_ptr A。我试过这个,尽管我无法从逻辑上理解为什么它会帮助解决我的问题,但它不起作用。感谢任何帮助。
A
是模板的名称,不是class的名称。如果你要命名一个专业,你的 typedef
就可以了:
typedef std::shared_ptr<A<int>> A_int_ptr; // A<int> **is** a class
如果你想保持代码的通用性,你需要切换到使用别名模板而不是常规类型别名:
template<typename T>
using A_ptr = std::shared_ptr<A<T>>;
template<typename T>
using AMap = std::unordered_map<int , A_ptr<T>>;
现在一切都已正确模板化,实例化取决于您打算传递给 A
的类型 T
。