作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
是否可以像下面这样继承一个专门的结构/类?
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>
或 TKey
的其他类型。
即使您提供了 Container
的部分特化,您仍然需要指定两个模板参数。
如果不想指定两个模板参数,可以为模板参数指定默认类型。在这种情况下,您将不得不重新排序 TKey
和 TValue
(这可能违反直觉,因为关联容器通常声明为 key
然后 值
):
// 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>
{
};
关于c++ - 从专门的模板结构/类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472726/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!