<分区>
是否有一种 C++ 类型像“动态大小的不可调整大小的数组”?这种类型可以被认为是以下两种情况之一:
-
vector<T>
但没有resize
,push_back
等 -
array<T,N>
但是在哪里N
是动态的而不是静态的。
我不想要一个只有当数组中的元素类型是不可复制类型时才有效的解决方案。我想要一个通用的解决方案。
<分区>
是否有一种 C++ 类型像“动态大小的不可调整大小的数组”?这种类型可以被认为是以下两种情况之一:
vector<T>
但没有 resize
, push_back
等array<T,N>
但是在哪里N
是动态的而不是静态的。我不想要一个只有当数组中的元素类型是不可复制类型时才有效的解决方案。我想要一个通用的解决方案。
最佳答案
是的,(几乎)有。 std::unique_ptr<T[]>
.主模板针对这种情况进行了部分特化,它提供了适当的接口(interface)(运算符 []
,无运算符 *
等)
或者,您可以包装 std::vector
在你自己的类中并限制它的接口(interface)。您甚至可以通过从 std::vector
派生一个类来做到这一点使用非公共(public)继承并仅发布其接口(interface)的相关部分:
template <class T, class A = std::allocator<T>>
struct FixedVector : private std::vector<T, A>
{
using FixedVector::vector::vector;
using FixedVector::vector::operator=;
using FixedVector::vector::get_allocator;
using FixedVector::vector::at;
using FixedVector::vector::front;
using FixedVector::vector::back;
using FixedVector::vector::data;
using FixedVector::vector::begin;
using FixedVector::vector::cbegin;
using FixedVector::vector::end;
using FixedVector::vector::cend;
using FixedVector::vector::empty;
using FixedVector::vector::size;
using FixedVector::vector::operator[];
};
关于c++ - 动态大小的不可调整大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28878287/