Мне нужна переменная типа SomeArray, чья [0] = var [1], [1] = var [2], [2] = var [3], чтобы передать ее в метод test ()
Но как преобразовать [больший массив] в переменную типа SomeArray
в массив из 3 элементов?
Примерно так:
short big_array[] {0, 1, 2, 4, 5};
SomeArray small_array {
big_array[1],
big_array[2],
big_array[3],
};
method(&small_array);
Однако, если вам всегда нужен подмассив (т.е. всегда нужны последовательные элементы), вы можете избежать копирования, изменив method
, чтобы просто взять указатель на первый элемент массива:
void method2(short arr[3]);
Таким образом, вы можете вызывать функцию с подмассивом массива любого размера (при условии, что в нем достаточно элементов):
short big_array[] {0, 1, 2, 4, 5};
method2(big_array + 1);
С другой стороны, проверка типов во время компиляции не спасет нас от ошибоки передача слишком маленького массива просто имеет неопределенное поведение.
Эта идея может быть расширена, и вы можете поддерживать любую другую (обходную) структуру данных в дополнение к массивам, сделав method
шаблоном функции.и принять любой произвольный итератор.