Определение класса IDL с массивом неизвестного размера в качестве переменной-члена

Я относительно новичок в IDL, поэтому я уверен, что то, что я хочу сделать, на самом деле довольно тривиально!

Я создаю класс с несколькими переменными-членами. Два из них будут просто числами с плавающей запятой, но третий я хотел бы быть трехмерным массивом неизвестного размера (ну... на самом деле я знаю, что размер третьего измерения равен 12, но это все!). Как мне объявить это в определении класса или это невозможно? Может быть, мне нужно работать со структурой данных, отличной от массива?

Вот мой код:

pro field__define
  void={field, lat_res: 0.0, long_res: 0.0, values: ?!?!?!?!}
  return
end

person tiswas    schedule 14.12.2011    source источник


Ответы (2)


Вы хотите использовать указатель, например:

pro field__define
  void = { field, lat_res: 0.0, long_res: 0.0, values: ptr_new() }
end

Кстати, в определении нет необходимости в RETURN, выполнение возвращается, когда встречается оператор END.

На самом деле это не создает указатель, а просто экономит место для указателя. Если вы хотите использовать поле, вам нужно будет сделать что-то вроде:

self.values = ptr_new(fltarr(3, 4, 5))

Затем используйте такие значения, как:

help, *self.values

Наконец, не забудьте очистить кучу, когда закончите с массивом:

ptr_free, self.values

Было бы неплохо получить книгу по таким темам, в ней много деталей, которые могут помочь с помощью нескольких примеров.

person mgalloy    schedule 14.12.2011

Альтернативный метод, использующий хэш для представления переменных-членов класса, описан здесь. Его преимущество в том, что работать с хэшами, возможно, проще, чем с указателями в IDL, но для его работы требуется по крайней мере IDL версии 8.

person Mark Piper    schedule 04.03.2013