如何访问C++;使用SWIG从Perl编写程序?

如何访问C++;使用SWIG从Perl编写程序?,perl,swig,Perl,Swig,我想从perl脚本访问C++程序的模板列表,并使用这些值。 示例代码: typedef list < Struct1 * > sturct1_list; struct Struct2 { int i; struct1_list List1; } struct Struct1 { int j; } 现在打印为: Reference type: \_p\_std\_\_listTutils\_\_Struct1\_p\_t 如何使用此函数从结构中获取

我想从perl脚本访问C++程序的模板列表,并使用这些值。

示例代码:

typedef list < Struct1  * > sturct1_list;

struct Struct2
{
    int i;
    struct1_list List1;
}

struct Struct1
{
    int j;
}
现在打印为:

Reference type:  \_p\_std\_\_listTutils\_\_Struct1\_p\_t 
如何使用此函数从结构中获取值

从重复问题更新: 在接口文件中,我把

%template(ListStruct1) std::list< Struct1 * >;
我能够使用这些元素。但是我不知道如何使用这些API访问列表中的各个元素?或者我在接口文件中遗漏了什么

更新:

typemap是否可以在此处以数组形式返回列表???

首先,是常规信息 演示如何对模板进行包装

同一教程展示了如何使用Perl中的模块,但是Perl示例没有涉及模板

演示如何使用向量执行此操作

这似乎提到了接口

第二,关于名单 >P>不能像Perl数组那样以“下标”的方式访问C++列表。如果需要,必须使用向量作为基础类型

  • 作为替代方案,创建一个类扩展列表,给它一个通过索引返回元素的新方法,并在接口中公开该方法

  • <> >如果您希望通过查找元素访问列表,比如C++,则需要编写一个列表,该界面公开了FIDER()方法——默认的不是读取源代码。

    首先,一般信息 演示如何对模板进行包装

    同一教程展示了如何使用Perl中的模块,但是Perl示例没有涉及模板

    演示如何使用向量执行此操作

    这似乎提到了接口

    第二,关于名单 >P>不能像Perl数组那样以“下标”的方式访问C++列表。如果需要,必须使用向量作为基础类型

  • 作为替代方案,创建一个类扩展列表,给它一个通过索引返回元素的新方法,并在接口中公开该方法

  • <> >如果您希望通过查找元素访问列表,比如C++,则需要编写一个列表,该界面公开了FIDER()方法——默认的不是读取源代码。


    在您的界面中,尝试:

    %include "std_list.i"
    
    %template(ListStruct1) std::list< Struct1 * >;
    

    更新:当然,我忽略了提到(甚至意识到)这对python、java和其他一些语言非常有效,但在perl中完全失效…

    在您的界面中,请尝试:

    %include "std_list.i"
    
    %template(ListStruct1) std::list< Struct1 * >;
    

    更新:当然,我没有提到(甚至没有意识到)这对于python、java和其他一些语言来说非常有效,但是在perl中完全被破坏了…

    hi。。我看了文件。。但是我仍然很困惑如何从perl访问该列表?您不能从perl“访问”列表中的数据,因为默认的列表接口没有为您提供任何这样做的方法。请参阅3个可能答案的答案,根据您需要的内容,我们可以做%Type(out)列表{}并将其作为数组返回吗?您可能可以,但我不太清楚,如果把它变成向量状的Perl数组,那么C++中的列表(与向量相反)的目的是什么?我看了文件。。但是我仍然很困惑如何从perl访问该列表?您不能从perl“访问”列表中的数据,因为默认的列表接口没有为您提供任何这样做的方法。请参阅3个可能答案的答案,根据您需要的内容。我们可以做%Type(out)列表{}并将其作为数组返回吗?可能您可以,但我不太清楚C++中有列表的目的(与向量相反)。如果您只是将其转换为类似于向量的Perl数组,而没有支持Perl的std_列表,那么您将受到大小、空、清除和推送的限制。我用swig 1.3.39进行了测试。然而,Vector提供了push、pop、get和set,这实际上可能很有用。。我没有尝试指定的%define指令。。但我希望它在perl中工作。。不管怎样,我只是尝试一下。没有一个std_列表。我支持perl,你只限于大小,空,清除,推。我用swig 1.3.39进行了测试。然而,Vector提供了push、pop、get和set,这实际上可能很有用。。我没有尝试指定的%define指令。。但我希望它在perl中工作。。无论如何,我会试试的。。
    %include "std_list.i"
    
    %template(ListStruct1) std::list< Struct1 * >;
    
    %define SWIG_EXPORT_ITERATOR_METHODS