从专用模板结构/类继承
Inheriting From Specialized Template Struct/Class
是否可以继承以下这样的特殊结构/类?
template<class TKey, class TData>
struct Container
{
virtual void Add(TKey key, TData data) = 0;
};
template<class TData>
struct Container<int, TData>
{
virtual void Add(int key, TData data) = 0;
};
struct TicketContainer : public Container<std::string>
{
void Add(int key, std::string data)
{
}
};
我在TicketContainer
声明中遇到错误,抱怨声明的模板参数太少。
更改:
struct TicketContainer : public Container<std::string>
至:
struct TicketContainer : public Container<int, std::string>
或者CCD_ 2的某种其它类型。
即使您已经提供了Container
的部分专用化,您仍然需要指定这两个模板参数。
如果不希望同时指定两个模板参数,则可以为模板参数指定默认类型。在这种情况下,您将不得不对TKey
和TValue
进行重新排序(这可能与直觉相反,因为关联容器通常声明为key
,然后是value
):
// Reordered 'TData' and 'TKey'.
template<class TData, class TKey = int>
struct Container
{
virtual void Add(TKey key, TData data) = 0;
};
template<class TData>
struct Container<TData> // Equivalent to 'struct Container<TData, int>'
{
// This specialization seems pointless as it defines no
// special behaviour.
virtual void Add(int key, TData data) = 0;
};
struct TicketContainer : public Container<std::string>
{
};
相关文章:
- 为什么除了继承聚合结构之外,结构为空,无法聚合初始化?
- 将继承的结构传递给 poll()
- 继承层次结构并将元素添加到向量
- 具有菱形继承结构的子类的大小似乎很奇怪
- 如何向类添加继承结构,请参阅"enable_share_on_this"
- 在C 中继承C结构并将其传递回C库是安全的吗?
- 来自无法识别的继承结构的本地声明
- 继承结构的类型转换导致g++编译错误
- C++ 将结构函数作为继承结构中函数的参数传递
- 私下继承结构
- 有没有办法避免在特定自定义类继承结构中使用虚拟方法
- 可以在C++中类继承结构
- 当使用代码块13.12时,Doxygen没有产生正确的继承结构
- C++11 中的 POD 和继承.结构的地址 == 第一个成员的地址
- 具有带函数指针的类私有成员的继承结构
- 这种c++继承结构可能吗?
- 重写采用继承结构的函数
- 此继承结构是否存在切片问题
- 如何从基类继承结构成员
- 如何在c++中创建继承结构时设置父成员