声明模板的共享指针
declaring a shared pointer of a template
我的类模板如下所示
Counter.hpp
template <typename T1, size_t Count>
class Counter {
public:
explicit Counter();
~Counter() = default;
void inc(T1 t, uint64_t val);
void dec(T1 t, uint64_t val);
private:
uint16_t array[Count];
};
在Main.cpp
文件中
我能够创建这样的对象:
Counter< MetricCounter1Type, countOfMetricCounter1Type()> myCounter;
并使用对象....但我希望能够像指针声明这样的东西并在堆上创建一个对象:
using counterp = std::shared_ptr <Counter>;
counterp myCounter1p = std::make_shared<Counter<T1type, n>>;
counterp myCounter2p = std::make_shared<Counter<T2type, m>>;
我理解它的琐碎问题,不熟悉模板和共享指针,有太多的事情需要你思考
所以基本上问题是你能像上面一样创建一个通用的共享指针类型并实例化对象吗?
Counter
是一个类模板,它采用两个参数,即:这个类模板由T1
和Count
参数化。通过向这些参数提供参数,从此类模板生成类类型。
假设您传递给类模板的任何参数彼此不同,即:T1type
不同于T2type
或n
不同于m
,那么Counter<T1type, n>
和Counter<T2type, m>
是不同的类型。因此,生成的对象由:
std::make_shared<Counter<T1type, n>>();
std::make_shared<Counter<T2type, m>>();
也有不同的类型。因此,不能定义通用(非模板化)类型来存储这两个对象中的任何一个。
请注意,counterp
类型别名不会编译:
using counterp = std::shared_ptr<Counter>;
因为Counter
没有收到成为类型所需的两个模板参数。
但是,您可以定义别名模板:
template<typename T1, size_t Count>
using counterp = std::shared_ptr<Counter<T1, Count>>;
然后为couterp
提供它所需的两个模板参数:
counterp<T1type, n> myCounter1p = std::make_shared<Counter<T1type, n>>();
counterp<T2type, m> myCounter2p = std::make_shared<Counter<T2type, m>>();
再次请注意,counterp<T1type, n>
和counterp<T2type, m>
可以是不同的类型。
您可以使用auto
auto myCounter1p = std::make_shared<Counter<T1type, n>>;
auto myCounter2p = std::make_shared<Counter<T2type, m>>;
或别名模板
template<typename T1, size_t Count>
using counterp = std::shared_ptr <Counter<T1, Count>>;
...
counterp<T1type, n> myCounter1p = std::make_shared<Counter<T1type, n>>();
counterp<T2type, m> myCounter2p = std::make_shared<Counter<T2type, m>>();
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 嵌套类、继承和C++中的共享指针
- 制作一对共享指针并推送一个向量
- 如何将共享指针用作函数参数
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 尝试通过共享指针使用变量时读取访问冲突
- 如何将元素插入到标准::地图的共享指针中?
- 共享指针生存期
- 初始化可变数据结构中的共享指针向量
- 阻止在返回时复制共享指针