У меня есть целочисленные значения, которые используются для доступа к данным в несвязанных хранилищах данных, то есть дескрипторах. Я решил обернуть целые числа в структуру, чтобы иметь строго типизированные объекты, чтобы нельзя было перепутать разные целые числа. Они есть и должны быть POD. Это то, что я использую:
struct Mesh {
int handle;
};
struct Texture {
int handle;
};
У меня есть массивы этих хэндлов, например: Texture* textureHandles;
.
Иногда мне нужно передать массив дескрипторов как int*
в более общие части кода. Прямо сейчас я использую:
int* handles = &textureHandles->handle;
который по существу принимает указатель на первый элемент структуры и интерпретирует его как массив.
Мой вопрос в основном заключается в том, является ли это законным или нарушает строгое использование псевдонимов для манипулирования int* handles
и Texture* textureHandles
, указывающими на одну и ту же память. Я думаю, что это должно быть разрешено, поскольку доступ к базовому типу (int
) осуществляется одинаково в обоих случаях. У меня есть оговорка, связанная с тем, что я обращаюсь к нескольким структурам, беря адрес члена внутри одной структуры.
В качестве дополнения к моему первому вопросу, будет ли нормально следующее?
int* handles = reinterpret_cast<int*>(textureHandles);
operator int()
к своим дескрипторам, чтобы избежать повторных интерпретаций. - person Neil Kirk   schedule 15.02.2015void*
, а IIRC, интерфейс swig Java используетlong long
. Но идея та же: объект представлен дескриптором, который является своего рода волшебным файлом cookie, который позволяет найти объект.) - person James Kanze   schedule 16.02.2015