C++ 如何在多个成员阵列上构建整合视图?
成员函数接收对象,每个对象具有两个或多个相同类型的数组(C样式,C++ 如何在多个成员阵列上构建整合视图?,c++,c++11,C++,C++11,成员函数接收对象,每个对象具有两个或多个相同类型的数组(C样式,T[])。如何将一个对象的数组映射为一个对象?例如的-循环可用于迭代“串联”数组。对象具有相同的分类器。不能假定数组元素位于连续的内存空间中。不得实际复制或移动阵列元素 我想用它。可以定义。根据: 编译器非常了解数组相对于完整对象的偏移量,以及数组中数组元素的偏移量,并且编译器知道如何添加 例如,在下面的代码中,我尝试为成员函数process()完成它: #包括 使用名称空间std; constexpr size\u t As=3;
T[]
)。如何将一个对象的数组映射为一个对象?例如的-循环可用于迭代“串联”数组。对象具有相同的分类器。不能假定数组元素位于连续的内存空间中。不得实际复制或移动阵列元素
我想用它。可以定义。根据:
编译器非常了解数组相对于完整对象的偏移量,以及数组中数组元素的偏移量,并且编译器知道如何添加
例如,在下面的代码中,我尝试为成员函数process()
完成它:
#包括
使用名称空间std;
constexpr size\u t As=3;
constexpr size_t Bs=2;
结构部件
{
字符a[As]={'a','B','C'};
字符b[Bs]={'D','E'};
};
类处理器
{
void run(const char&o)const{cout由于几个原因,这无法实现
首先,数组元素必须位于连续的内存空间中
此外,如中所述:
访问数组中的项是访问普通int的另一个间接层次
根据:[定义对成员数据的某种双重间接寻址]无法使用该语言。不清楚真正的问题是什么。如果a
和b
是不同的数组,显然,您不能在不复制副本的情况下直接在连续范围内迭代它们的串联。如果您想像在单个数组中一样迭代a
和b
,您可以可以创建一个自定义迭代器,类似于std::deque
的迭代器-当它到达a
的最后一个元素之后的迭代器时,它会转到b
的第一个元素。我不明白为什么不能这样做(如您在回答中所述),也不是,这与成员指针有什么关系。我认为至少有三种方法可以做到这一点。@churill,你能给出一个答案,列出可能的解决方案吗?我很想听听你的想法。