Non posso dire se questo è un bug o cosa.Come posso passare un array da perl a C++ in linea?
Il seguente codice funziona con Inline::C
ma non 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);
}
Le piste di cui sopra bene, ma sostituire C
con CPP
, e ottengo l'errore Can't locate auto/main/findAvLen.al in @INC...
codice
posso avere altra linea C++ a lavorare . È possibile, ad esempio, passare un elenco di variabili al codice inline con i puntini di sospensione come fanno in this example, ma mi chiedo perché AV * non funzioni! Per esempio, voglio utilizzare una subroutine per convertire le matrici perl passate a C++ in vettori, ad es. void perl2vector(AV* ar, std::vector<T> &v) {...}
, piuttosto che inserire codice per eseguire tale conversione in ogni funzione C++ che scrivo che richiede un argomento array. Come potrei usare la sintassi di quell'esempio per passare l'array perl a un simile convertitore?
Questo sembra essere un bug, ma nel frattempo, UESP ha trovato una soluzione:
int findAvLen(SV* arrRef) {
AV * arr = MUTABLE_AV(SvRV(arrRef));
return av_len(arr);
}
arr
è ora equivalente al arrayIn
desiderata nel codice di esempio di cui sopra.
Funziona bene per me: Perl 5.14.0 i686-linux-thread-multi, Inline 0.5, Inline :: CPP 0.38. Sembra un bug corretto, come ha detto uesp, anche se sembra che tutto ciò che devi fare sia aggiornare Inline :: CPP (non Perl) alla versione 0.29 o successiva. – ikegami
hrmm, sto usando perl v5.12.3 con Inline :: CPP v0.38. Cercherò di aggiornare il perl e vedere se questo aiuta. – flies
Ho un'altra scatola con perl v5.12.4 e ho ottenuto lo stesso errore. Sto parlando con il sysadmin ... – flies