У меня есть целочисленные значения, которые используются для доступа к данным в несвязанных хранилищах данных, то есть к дескрипторам. Я решил обернуть целые числа в структуре, чтобы иметь строго типизированные объекты, чтобы разные целые числа не могли быть перемешаны. Они, и должны быть, 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);