gpt4 book ai didi

c++ - 在以固定大小为模板的不同大小的缓冲区之间复制

转载 作者:行者123 更新时间:2023-11-30 02:45:39 24 4
gpt4 key购买 nike

简化版是这样的:

template<int Size> struct IntBuffer {int items[Size];}

IntBuffer<32> b1;
IntBuffer<16> b2;


b1 = b2; // I want this to be allowed as the size of b1 >= b2
b2 = b1; // I want this to be disallowed as the size of b2 < b1

编辑:似乎我应该更清楚......如果由于提到的大小约束行为而不允许分配,我想导致编译时错误。也没有提升,并且非常适合可能没有像 MSVC 2010 这样的完整 C++11 支持的编译器。

最佳答案

首先让我说,您应该这样做对我来说似乎并不直观。如果我正在阅读代码并看到它,我想知道如果目标缓冲区大小大于源缓冲区大小,其他元素会发生什么情况(它们会被保留吗?它们会被清除吗?它们会被清除吗?以其他一些不确定的方式改变?)。不仅如此,如果您将其限制为相同大小的缓冲区,编译器生成的复制构造函数和复制赋值运算符将正常工作,您不需要额外的工作。

但是如果您仍然想要这样做,您可以创建自己的复制赋值运算符。你必须编写你自己的 static_assert(但你肯定 可以 在 C++98 中做到这一点,因为 boost 已经做到了)因为你已经明确排除了这两个地方我知道得到一个已经为你编写和调试过的(C++11 和 boost)。

运算符可能看起来像这样:

template <int Size> template <int RightSize>
IntBuffer<Size>& IntBuffer<Size>::operator=(const IntBuffer<RightSize>& right)
{
static_assert(RightSize <= Size);
// The real work.
}

关于c++ - 在以固定大小为模板的不同大小的缓冲区之间复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24247198/

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