gpt4 book ai didi

c++ - 如何分配具有不同模板参数的两个容器

转载 作者:行者123 更新时间:2023-11-30 03:00:50 26 4
gpt4 key购买 nike

假设我有一个类容器:

template<class T, int size>
class container
{
private:
T* data;
int length;
public:
container()
{
data=new T[size];
length=size;
}
~container()
{
if(length>0)
delete[] data;
}
container& operator= (container<T,size> c)
{
if(length>0)
delete[] data;
data=new T[c.length];
length=c.length;
for(int i=0; i<length; i++)
data[i]=c.data[i];
return *this;
}
};

问题是,如果我有两个不同大小的容器,我不能使用 = 运算符将一个分配给另一个。例如:

container<int,4> c1;
container<int,5> c2;
c1=c2; // syntax error: 4!=5

像 C++11 数组这样的类允许这样做。
如何做到这一点?

最佳答案

模板就是——编译器用来创建类的模板,而不是类本身。

因此,container<int,4>container<int,5>是完全独立的类,具有隐含的所有访问限制。

特别是,这意味着 container<int, 4>的赋值运算符无法访问 private container<int,5>的成员.

有几种方法可以解决这个问题:

  • 消除大小模板参数,因为正如其他人指出的那样,您似乎在动态分配内存,因此在编译时确定大小不会增加任何值,实际上可能会产生误导,因为您的赋值运算符可能导致尺寸与申报尺寸不同。
  • 根据 container 实现您的赋值运算符的公共(public)接口(interface)。
  • 申报所有containerfriends 相同类型的类通过将以下行添加到您的类(class)中:

代码:

template<class U, int otherSize> friend class Foo;

并按如下方式声明您的赋值运算符:

template <int otherSize>
container<T,size>& operator=(container<T,otherSize> c);

关于c++ - 如何分配具有不同模板参数的两个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11655061/

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