当前位置: 首页 > 编程语言 > C#

你能痛饮一个boost--optional吗?Share

时间:2023-04-11 10:48:48 C#

你能痛饮一下boost::optional吗?我已经成功地使用SWIG构建了一个包装器接口,以便在C#中使用我的C++库。最近我公开了一些boost::optional对象,SWIG遇到了问题。有解决这个问题的标准方法吗?以前肯定有人遇到过这个……因为SWIG不理解增强类型,所以必须编写一个类型映射。这是一对boost::optional的类型映射。在Python中,您可以将None或整数传递给函数:%typemap(in)boost::optional%{if($input==Py_None)$1=boost::optional();else$1=boost::optional(PyLong_AsLong($input));%}返回的boost::optional将被转换为None或Python整数:%typemap(out)boost::optional%{if($1)$result=PyLong_FromLong(*$1);else{$result=Py_None;Py_INCREF(Py_None);}%}PossibleC#solutionusingstd::vector以上是C#学习教程:CanyouSWIGaboost::optional?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——#ifSWIGCSHARP//C++%typemap(ctype)boost::optional"void*"%typemap(out)boost::optional%{std::vectorresult_vec;如果(!!$1){result_vec=std::vector(1,$1.get());}else{result_vec=std::vector();$result=newstd::vector((conststd::vector&)result_vec);%}//C#%typemap(imtype)boost::optional"global::System.IntPtr"%typemap(cstype)boost::optional"int?"%typemap(csout,excode=SWIGEXCODE)boost::optional{SWIG_IntVectorret=newSWIG_IntVector($imcall,true);$excodeif(ret.Count>1){抛出newSystem.Exception("返回向量包含不止一个元素");}elseif(ret.Count==1){returnret[0];}else{返回空值;}}#endif//SWIGCSHARP本文来自网络收藏不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢