如何指定指向数组元素的成员指针

How to specify member pointer to an array element?

本文关键字:成员 指针 数组元素 何指 定指      更新时间:2023-10-16

我有一个函数库,它看起来像这样:

template<typename S1> void NastyFunction(S1 *array, EntryType S1::* member1);

因此,如果我有一个结构数组,比如:

struct TData {
  float a;
  float b[10];
};
TData dataArray[N];

我可以使用将NastyFunction应用于dataArray中的所有a-

NastyFunction( dataArray, &TData::a );

如何将此NastyFunction应用于所有dataArray中的b[7]

你不能。虽然整个数组都是类的成员,但它的各个元素不是,因此无法使成员指针指向它们。

如果不添加另一个间接级别,就只能引用类成员,例如:

template<typename S1> void NastyFunction(S1 *array, EntryType* S1::* member1)
{
  EntityType value = *member1;
}
struct TData {
  float b[10];
  float* ref = &b[7];
};
TData *dataArray;
NastyFunction( dataArray, &TData::ref );

但这听起来像是一个笨拙的解决方案。