gpt4 book ai didi

c++ - 指向任意类型(或任何其他模板类)的 std::vector 的指针

转载 作者:搜寻专家 更新时间:2023-10-31 00:21:54 24 4
gpt4 key购买 nike

假设我想要一个指向 std::vector 的指针的成员变量,但我不想指定它存储的变量类型。我只想访问那些独立于它的实际泛型类型的函数。这可能用 C++ 实现吗?像这样:

class Foo{
public:
void setVec(std::vector* someVec){
myVec = someVec;
};
int getSize(){
return myVec.size();
};
private:
std::vector* myVec;
};


int main(){
Foo foo;
vector<int> vec1;
vector<float> vec2;
foo.setVec(&vec1);
cout<<foo.getSize();
foo.setVec(&vec2);
cout<<foo.getSize();
}

注意:我不想对 Foo 进行模板化,我只想将 Foo 的单个实例与不同类型的 vector 一起使用。

当然 - 如果我可以改变类 vector ,那么我可以创建一个非模板化的基类

class Ivector{
virtual int size()=0;
};

然后制作

class vector<T> : public IVector...

继承自 Ivector。但是如果我不能改变有问题的类并且模板化类没有这样一个非模板化的基类,我该怎么办?

谢谢!

最佳答案

您快找到答案了。不是让 std::vector 继承自 Ivector,而是创建一个新类:

template <typename T>
class IVectorImpl : public Ivector
{
public:
explicit IVectorImpl(std::vector<T> * Data) : m_Data(Data){}
std::vector<T> * m_Data;
...
virtual int size() const {return m_Data->size();}
// Implement all the Ivector functions here to call the respective functions off of m_Data
};

现在让您的 Foo 类保留一个指向 Ivector 而不是 std::vector 的指针。

使 Foo::setVec 模板化

template <typename T>
void setVec(std::vector<T> * vec)
{
Ivector * newVec = new IVectorImpl<T>(vec);
delete myVec;
myVec = newVec;
}

关于c++ - 指向任意类型(或任何其他模板类)的 std::vector 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983814/

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