Я изучаю C++ и кажется, что невозможно получить массив как возвращаемый тип. Это правда?Не может быть массив как возвращаемый тип в C++? Альтернативы?
int foo(){}
работает отлично, но
int[] foo(){}
нет. Какова общепринятая работа вокруг этого?
В настоящее время я работаю над проектом, который использует как C#, так и C++. У меня есть C# файл, доступ к некоторым DLL код:
[DllImport("Test.dll")]
public static extern byte[,] getBytes(
[In] string filePath,
[In] string dataGroup);
Мой заголовочный файл имеет:
TEST_DLL BYTE[][] getBytes(std::string filePath, std::string dataGroup);
/* This throws an error since I can't use an array as a return type. */
и моей реализации внутри файла .cpp является:
TEST_DLL BYTE[][] getBytes(std::string filePath, std::string dataGroup)
{
printf("getBytes entered."
/* More code here...*/
}
/* This also throws an error due to the array use. */
В основном, Я пытаюсь вернуть массив двумерных байтов из моего DLL-кода без необходимости конвертировать что-либо со стороны C#, т. Е. Все выполнение кода, связанное с getBytes, должно происходить в коде C++.
У меня есть рабочий пример этого, который не использует массив, а скорее void *, который из моего понимания является указателем на массив, который я возвращаю. Затем у меня есть функция C#, которая использует IntPtr и Marshal.Copy для получения байтового массива. Я пытаюсь определить разницу в затратах между этими двумя методами. Я бы предположил, что было бы намного быстрее возвращать массив двумерных байтов непосредственно из кода на C++ вместо использования дополнительного кода преобразования C# (используемые множители данных огромны - около 500 ГБ, так что каждая небольшая часть оптимизации рассчитывается).
Как я могу получить двумерный массив байтов только из моего кода на C++ без необходимости его преобразования в C#?
int * foo() {} будет работать – Steve
В C++, поскольку * вы * не можете вернуть массив, используйте 'std :: vector'. –
Это не собирается вмешиваться в C#, хотя, я не думаю? –