Как я могу передать массив из perl во встроенный C++?

Не могу понять, баг это или что.

Следующий код работает с Inline::C, но не с Inline::CPP

#!/usr/bin/perl
use warnings;
use Inline C;

my @array = (1..10);
print findAvLen(\@array), "\n";

__END__
__C__

int findAvLen(AV* arrayIn) {
    return av_len(arrayIn);
}

Приведенный выше код работает нормально, но замените Cна CPP, и я получаю сообщение об ошибке Не удается найти auto/main/findAvLen.al в @INC...

Я могу заставить работать другой встроенный код C++. Например, можно передать список переменных во встроенный код с многоточием, как это делается в этом примере, но мне интересно, почему AV* не работает! Например, я хочу использовать подпрограмму для преобразования массивов perl, переданных в C++, в векторы, например. void perl2vector(AV* ar, std::vector &v) {...}вместо того, чтобы вставлять код для выполнения такого преобразования в каждую написанную мной функцию C++, которая принимает аргумент массива. Как я могу использовать синтаксис этого примера для передачи массива perl такому конвертеру?


Это похоже на ошибку, но тем временем uesp нашел обходной путь:

int findAvLen(SV* arrRef) { 
    AV * arr = MUTABLE_AV(SvRV(arrRef));
    return av_len(arr);
}

arrтеперь эквивалентен arrayIn, желаемому в приведенном выше примере кода.

6
задан flies 10 April 2012 в 16:05
поделиться