не беспокойся. это не совместимо это грязно и подвержено ошибкам. У c ++ были решения, которыми легче управлять задолго до того, как эта функция существовала. что вы прикрепляете к концу своей структуры? обычно вы просто используете что-то вроде std :: vector, std :: array или array фиксированного размера.
UPDATE
Я хочу получить список времени начала нот (uint64_t) и перебрать их, чтобы посмотреть, какие из них, если они есть, воспроизводятся. я собирался добавить переменную count в структуру, чтобы отслеживать количество элементов в гибком массиве.
хорошо, тогда массив фиксированного размера должен подойти, если у вас фиксированная полифония. вам не понадобится более одного такого массива в большинстве синтезаторов iOS. Конечно, размеры массива 'предстоящие заметки' могут варьироваться в зависимости от синтезатора приложения? пробник? секвенсор? живой ввод?
template <size_t NumNotes_>
class t_note_start_times {
public:
static const size_t NumNotes = NumNotes_;
typedef uint64_t t_timestamp;
/*...*/
const t_timestamp& timestampAt(const size_t& idx) const {
assert(this->d_numFutureNotes <= NumNotes);
assert(idx < NumNotes);
assert(idx < this->d_numFutureNotes);
return this->d_startTimes[idx];
}
private:
t_timestamp d_presentTime;
size_t d_numFutureNotes; // presumably, this will be the number of active notes,
// and values will be compacted to [0...d_numFutureNotes)
t_timestamp d_startTimes[NumNotes];
};
// in use
const size_t Polyphony = 16;
t_note_start_times<Polyphony> startTimes;
startTimes.addNoteAtTime(noteTimestamp); // defined in the '...' ;)
startTimes.timestampAt(0);
Если вам нужен массив динамического размера, который может быть очень большим, используйте вектор. если вам нужен только один экземпляр этого и максимальная полифония равна (скажем) 64, то просто используйте это.