gpt4 book ai didi

c++ - 如何将数组从 perl 传递到内联 C++?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:41 25 4
gpt4 key购买 nike

我不知道这是一个错误还是什么。

以下代码适用于 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);
}

以上运行正常,但替换 CCPP ,我收到错误 Can't locate auto/main/findAvLen.al in @INC...

我可以让其他内联 C++ 代码工作。例如,可以将变量列表传递给带有省略号的内联代码,就像它们所做的那样 in this example ,但我想知道为什么 AV* 不工作!例如,我想使用子例程将传递给 C++ 的 perl 数组转换为 vector ,例如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);
}

arr现在相当于 arrayIn在上面的示例代码中需要。

最佳答案

这似乎与 this Perl bug 相同它存在于 5.10.0 中,应该已在 5.10.29 版本中修复。如果您运行的是 5.10.0-28,请尝试更新。如果您没有运行这些版本但仍然收到错误,您可以尝试执行 this forum post 中提到的操作通过将 AV 更改为 SV

关于c++ - 如何将数组从 perl 传递到内联 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com