gpt4 book ai didi

C++ - 模板子类继承自多个模板类

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:12 26 4
gpt4 key购买 nike

我正在创建一个名为 HashMap 的简单类:

template <typename K,typename V> class HashMap{
.
.
.
public:

class Hashable;

我创建了另一个类:

template<typename T> class Stack;

现在我必须创建一个新类 ( NewStackClass ),它扩展了 StackHashMap<K,V>::Hashable .

此类的对象将在 K=Stack/NewStackClass 时被实例化。

例子:

HashMap<NewStackClass<int>,int> map;
//T=int;K=NewStackClass<int>;V=int;

或:

HashMap<Stack<char>,int> map;
//T=char;K=Stack<char>;V=int;

我怎样才能得到这个?另外,我想将类声明与其实现分开。

我已经试过了:

template <typename B, typename C>
template <typename A> class NewStackClass : public Stack<A>, public HashMap<B,C>::Hashable{

virtual int hashCode() const;
bool operator==(const MyStack<A>& stack);
};

但是没用:

[Error] too many template-parameter-lists

感谢任何帮助。

编辑

创建新堆栈类:

    template <typename StackType,typename HashMapValue> class MyStack : public NewStackClass<StackType>, public HashMap<Stack<StackType>,HashMapValue>::Hashable{

virtual int hashCode() const {

return 1;
}

bool operator==(const NewStackClass<StackType,HashMapValue>& stack){

return true;
}
};

进入私密空间HashMap类:

private:

int hash(const Hashable& key) const{

return (31*17 +key.hashCode()) % TABLE_SIZE;
}

在 main.cpp 中这样做:

HashMap<NewStackClass<int,int>,int> map1;

NewStackClass<int,int> stack;
map1.put(stack,0);

出现这个错误:

[Error] no matching function for call to "HashMap<NewStackClass<int, int>, int>::hash(const NewStackClass<int, int>&)"

错误来自于此:

[Note] no known conversion for argument 1 from 'const NewStackClass' to 'const HashMap, int>::Hashable&'

最佳答案

您的代码包含语法缺陷。您的类可能只有一个模板参数列表。

合并

template <typename B, typename C>
template <typename A> class NewStackClass ...

对此

template <typename B, typename C, typename A>
class NewStackClass ...

让它编译。此外,您没有提供有关 MyStack 应该是什么的信息。我只是假设您打算改为编写 Stack

您还应该考虑您的类 NewStackClass 是否真的需要三个模板参数,或者实际上是否只有两个不同的模板参数。

从你的问题来看,你可能想做的事:

template <typename K, typename V>
class NewStackClass : public Stack<K>, public HashMap<Stack<K>,V>::Hashable {

相反。

固定代码(仅语法)

template <typename K,typename V>
class HashMap {
public:
class Hashable {
};
};

template<typename T> class Stack {
};

template <typename B, typename C, typename A>
class NewStackClass : public Stack<A>, public HashMap<B,C>::Hashable {

virtual int hashCode() const;
bool operator==(const Stack<A>& stack);
};

关于C++ - 模板子类继承自多个模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840640/

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