По сути, эта сигнатура функции позволяет обрабатывать массивы разных типов в одном месте. Если бы он был запрограммирован на C, он, вероятно, использовал бы макрос (#define
) для выполнения чего-то подобного.
Синтаксически <T>
означает: T является заполнителем для любого класса объектов, переданных этой функции. Если вы передаете этой функции объект типа T, то все остальные места, в которых упоминается T внутри этой функции, также будут означать этот тип. Таким образом, вам не нужно писать отдельные функции, если вы хотите обрабатывать разные типы. Однако внутри компилятор вполне может генерировать отдельный код для каждого типа. Таким образом, дженерики — это ярлык, позволяющий работать с типами переменных.
Это будет сложно перевести на Xojo, так как он не предоставляет для этого никаких средств.
Поскольку Xojo не предлагает поддержку универсальных шаблонов (шаблонов), вам нужно выяснить, какие различные типы массивов фактически используются с этой функцией, и написать конкретную функцию для каждого из этих случаев.
Вы можете работать с базовым классом Xojo Object
в качестве параметра, хотя передача массивов Object часто не будет работать из-за довольно статической проверки типов массивов Xojo.
Хитрость в этом заключается в том, чтобы упаковать массив в Variant, а затем специально обработать каждый тип массива внутри. Это по-прежнему не будет общим, но, по крайней мере, сохранит все это в одной функции, как это делает оригинал.
Что-то вроде этого:
Sub createObjects(arrayContainer as Variant, newAmount as Integer)
if not arrayContainer.IsArray then break ' assertion
// Handle case when array is of MyObject1
try
#pragma BreakOnExceptions off ' prevents Debugger from stopping here
dim a() as MyObject1 = arrayContainer
#pragma BreakOnExceptions default
for i as Integer = 1 to newAmount
a.Append new MyObject1
next
return
catch exc as TypeMismatchException
' fall thru
end try
// Handle more types here
break
End Sub
Затем назовите это так:
dim d() as MyObject1
createObjects d, 3
person
Thomas Tempelmann
schedule
03.09.2017
T
означает любой класс. Вы можете прочитать об Generics. - person Jaims   schedule 03.09.2017Class<T>
, и копирует его. Например, вы можете вызвать его сreallocateBuffer(String.class, stringArray, stringArray.length, 10_000)
— он вернет новыйString[]
с длиной10_000
— предположительно копирование данных изstringArray
во вновь выделенный массив. - person Boris the Spider   schedule 03.09.2017