gat*_*rer 0 c++ templates shared-ptr
我在绕着这个问题缠绕时遇到了一些困难,可能是因为我不完全理解底层的机制.
我有一个如下结构:
template <class T>
struct A {
int id;
T x;
}
Run Code Online (Sandbox Code Playgroud)
然后将此结构用作shared_ptr的类型:
typedef std::shared_ptr<A> A_ptr;
Run Code Online (Sandbox Code Playgroud)
然后将其存储在地图中:
typedef unordered_map<int , A_ptr> AMap;
Run Code Online (Sandbox Code Playgroud)
但是,当我编译时,我收到以下错误:
> 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;
Run Code Online (Sandbox Code Playgroud)
我已阅读有关类似问题的其他帖子,但他们都建议在结构中创建shared_ptr A. 我试过这个,即使我无法从逻辑上理解为什么它会对我的问题有所帮助,但它不起作用.任何帮助表示赞赏.
A是模板的名称,而不是类的名称.如果你要说一个专业化,你typedef会没事的:
typedef std::shared_ptr<A<int>> A_int_ptr; // A<int> **is** a class
Run Code Online (Sandbox Code Playgroud)
如果要保持代码通用,则需要切换到使用别名模板而不是常规类型别名:
template<typename T>
using A_ptr = std::shared_ptr<A<T>>;
template<typename T>
using AMap = std::unordered_map<int , A_ptr<T>>;
Run Code Online (Sandbox Code Playgroud)
现在一切都是正确模板化的,实例化取决于T您打算传递的类型A.
| 归档时间: |
|
| 查看次数: |
38 次 |
| 最近记录: |