Swig 类型映射内部构造函数到受保护
Posted
技术标签:
【中文标题】Swig 类型映射内部构造函数到受保护【英文标题】:Swig typemap internal constructor to protected 【发布时间】:2016-07-06 21:57:02 【问题描述】:我的 C# 代码使用第三方库,用 C++ 编写并使用 Swig 将其包装在 C# 中(这里有三个项目,MyCodeCS、ThirdCpp 和 ThirdCs)
因此,如果我在 cpp 中有带有公共构造函数 Acpp()
和 Acpp(int)
的 Acpp 类,我最终会使用带有类 Acs、正确定义的构造函数 Acs()
和 Acs(int)
的包装 C# 版本(到目前为止,一切都很好),它们都使用内部的 swig 生成的构造函数:Acs(IntPtr cPtr,bool)
。
(当然 cpp 和 cs 类都被命名为 A,但为了清楚起见,我会用 cpp 和 cs 后缀命名它们)
现在,我正在集成一个新的 cpp 模块 (MyCodeCpp),其中包含一个继承自 Acpp 的类 Bcpp。到目前为止,一切都很好:Bcpp 继承自 Acpp,我可以毫无问题地从我的 C# 代码中调用它,使用它的IntPtr
。
我的问题是,为了让我的 Bcs 对象被识别为 Acs,我需要定义这样的 Bcs 类。这是一个相当愚蠢的,因为我已经得到了 cptr:
public class Bcs : Acs
public Bcs(IntPtr cptr): base(cptr,true)
问题是...Acs(IntPtr,bool)
是内部的,这意味着如果我想这样做,我需要:
Acs(IntPtr,bool)
受到内部保护而不是内部保护,因此它可以由基于 MyCodeCS 的 Bcs 类调用
问题是:我不知道该怎么做,或者即使有可能?
非常感谢
【问题讨论】:
你能显示示例 .i 文件吗? 虽然我很确定您的问题有一个简单的解决方案,但仅通过文字很难理解潜在的问题。你能展示一个minimal 完整的例子,我需要在我的开发环境中试用它吗?我什至无法说服自己,您目前实际上正在尝试解决正确的问题。 【参考方案1】:解决了。 只需要放
SWIG_CSBODY_PROXY(public, public, SWIGTYPE)
SWIG_CSBODY_TYPEWRAPPER(public, public, public, SWIGTYPE)
在我的 .i 文件中
【讨论】:
以上是关于Swig 类型映射内部构造函数到受保护的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 swig 修改类构造函数以保持对构造函数参数之一的引用?