警告325:当前不支持嵌套类(忽略代理)

时间:2017-03-19 22:04:36

标签: c++ tcl swig

运行swig接口文件时出现以下警告 警告325:当前不支持嵌套类(忽略代理)。 我能够取消警告。但是我需要用于计算的嵌套类

以下是接口文件(example.i)

%module example
%{
#include "Rinside.h"
#include "Rinsidecommon.h"
#include "Callbacks.h"
%}
/* Let's just grab the original header file here */
%include "Rinside.h"
%include "Rinsidecommon.h"
%include "Callbacks.h"

执行接口文件时。以下是警告

C:\swigwin-3.0.12\Examples\r\Rinside>swig -tcl -c++ example.i
Rinside.h(70) : Warning 325: Nested class not currently supported (Proxy ignored)
Rinside.h(91) : Warning 503: Can't wrap 'operator []' unless renamed to a valid identifier.

我试图从Tcl调用RInside。首先,我的C代码应该能够接受参数,通过传递这些参数调用RInside,并打印RInside执行的结果

下面是我在Rinside.h文件中的嵌套类。 如何在接口文件中包含嵌套类? 我对swig来说相对较新

    class Proxy {
public:
    Proxy(SEXP xx): x(xx) { };

    template <typename T>
    operator T() {
        return ::Rcpp::as<T>(x);
    }
private:
    Rcpp::RObject x;
};

有人可以给我一个骨架或代码的某些部分。这对我有帮助

我在包装cpp代码时遇到以下错误

rinside_sample0_wrap.cxx: In function 'int _wrap_RInside_parseEval__SWIG_1(ClientData, Tcl_Interp*, int, Tcl_Obj* const*)':\
rinside_sample0_wrap.cxx:1906:18: error: no matching function for call to 'RInside::Proxy::Proxy()'
In file included from rinside_sample0_wrap.cxx:1700:0:
Rinside.h:61:6: note: candidate: RInside::Proxy::Proxy(SEXP)
Proxy(SEXP xx): x(xx) { };
Rinside.h:61:6: note:   candidate expects 1 argument, 0 provided

2 个答案:

答案 0 :(得分:0)

根据SWIG Documentation ...

  

兼容性注意:在SWIG-3.0.0之前,嵌套类支持有限。嵌套类被视为不透明指针。但是,在这些旧版本中有一个嵌套类支持的解决方法,要求用户在全局范围内复制嵌套类,在全局范围内为嵌套类添加typedef,并在嵌套类上使用“nestedworkaround”功能。这导致与“平坦”特征大致相同的行为。现在SWIG-3.0.0中提供了适当的嵌套类支持,此功能已被弃用,不再需要更改代码。

因此,您应该使用3.0或更高版本来支持嵌套类。这样你就可以避免压制任何东西,也可以解决你的其他问题。

答案 1 :(得分:0)

我刚遇到与python相同的问题。当我使用3.0.12嵌套类时,我会看到警告:

Warning 325: Nested class not currently supported (Foo ignored)

所以我使用了以下功能:

   %module test
   %feature("flatnested", "1");

   %rename (Bar_Foo) Bar::Foo;
   class Foo {};
   class Bar {
    public:
    class Foo {};
   };

实际上在我的问题中,我在需要它的特定情况后再次禁用了该功能(因为它导致枚举类的问题)。