提问者:小点点

如何编写将被继承的泛型代码?


我试图在继承的父类中编写一些泛型代码。 然而,我正在为一些变量的类型而苦苦挣扎。 使用下面的代码:

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;
}

(其中BC是结构)。

我遇到了迭代器的问题(类型为“void*”的值不能用于初始化类型为“std::vector>*”的实体),这是有意义的。 但是类A永远不会被直接使用,只有B和C,所以A永远不会遇到这个问题,因为结构具有正确的类型。


共1个答案

匿名用户

您的意思是希望像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> {
}