我不知道这是一个错误还是什么.
以下代码适用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);
}
Run Code Online (Sandbox Code Playgroud)
以上运行正常,但替换C为CPP,我得到错误Can't locate auto/main/findAvLen.al in @INC...
我可以使用其他内联c ++代码.例如,可以将变量列表传递给带有省略号的内联代码,就像在本例中一样,但我想知道为什么AV*不起作用!例如,我将使用子例程将传递给C++的perl数组转换为向量,例如void perl2vector(AV* ar, std::vector<T> &v) {...},而不是插入代码来执行这样的转换到我编写的带有数组参数的每个C++函数.我如何使用该示例的语法将perl数组传递给这样的转换器?
这似乎是一个错误,但与此同时,uesp找到了一个解决方法:
int findAvLen(SV* arrRef) {
AV * arr = MUTABLE_AV(SvRV(arrRef));
return av_len(arr);
}
Run Code Online (Sandbox Code Playgroud)
arr现在等效于arrayIn上面示例代码中的所需.