У меня есть библиотека с функцией, которая выглядит так:
template<typename S1> void NastyFunction(S1 *array, EntryType S1::* member1);
Так что, если у меня есть массив структур, таких как:
struct TData {
float a;
float b[10];
};
TData dataArray[N];
Я могу подать заявку NastyFunction
все a
-с в dataArray
с помощью:
NastyFunction( dataArray, &TData::a );
Как применить это NastyFunction
всем например b[7]
-с в dataArray
?
Ты не можешь В то время как весь массив является членом класса, его отдельные элементы не являются, поэтому нет никакого способа сделать указатель на элемент указателем на них.
Вы не можете сделать это без добавления другого уровня косвенности, так что вы просто обращаетесь к членам класса, например:
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 );
Но это звучит как неуклюжее решение.