我试图在继承的父类中编写一些泛型代码。 然而,我正在为一些变量的类型而苦苦挣扎。 使用下面的代码:
class A {
protected:
std::vector<void*> struct1;
std::vector<void*> struct2;
std::vector<void*> struct3;
public:
A::~A()
{
for(decltype(A::struct1)* i : A::struct1) {
free(i);
}
for(decltype(A::struct2)* i : A::struct2) {
free(i);
}
for(decltype(A::struct3)* i : A::struct3) {
free(i);
}
}
}
class B {
protected:
std::vector<b*> struct1;
std::vector<b*> struct2;
std::vector<b*> struct3;
}
class C {
protected:
std::vector<c*> struct1;
std::vector<c*> struct2;
std::vector<c*> struct3;
}
(其中B
和C
是结构)。
我遇到了迭代器的问题(类型为“void*”的值不能用于初始化类型为“std::vector
的实体),这是有意义的。 但是类A永远不会被直接使用,只有B和C,所以A永远不会遇到这个问题,因为结构具有正确的类型。
您的意思是希望像b
这样的类从a
继承,以便析构函数将破坏向量
s的内容吗?
template<typename T>
class A {
protected:
std::vector<T*> struct1;
std::vector<T*> struct2;
std::vector<T*> struct3;
public:
A::~A() {
for(auto i : struct1) {
delete i;
}
for(auto i : struct2) {
delete i;
}
for(auto i : struct3) {
delete i;
}
}
}
class B: public A<B> {
}