gpt4 book ai didi

c++ - 构建本身就是 shared_ptr 类型的模板化容器

转载 作者:太空宇宙 更新时间:2023-11-04 15:00:16 25 4
gpt4 key购买 nike

我在思考这个问题时遇到了一些困难,可能是因为我不完全理解底层机制。

我有如下结构:

template <class T>
struct A {
int id;
T x;
}

此结构然后用作 shared_ptr 的类型:

typedef std::shared_ptr<A> A_ptr;

依次存储在 map 中:

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 是模板的名称,而不是类的名称。如果你要命名一个特化,你的 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

关于c++ - 构建本身就是 shared_ptr 类型的模板化容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50006137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com