我正在尝试围绕c ++库创建一些ruby包装器。 我有大部分工作,但我有一些警告,我想解决。
问题在于2个头文件,下面是代码片段
typedef std::set<WParm,std::less<WParm> > WParmlistType;
typedef WParmlistType::iterator WParmlistIter;
class WParmlist : public WParmlistType {
和我得到的警告...... 警告401:基类'WParmlistType'没有任何已知信息。忽略。
,第二个标题类似:
typedef std::vector<WString> WEditType;
typedef WEditType::iterator WEditIter;
class WEdit : public WEditType {
发出类似警告:
警告401:基类'WEditType'没有任何已知信息。忽略。
之前我曾见过这种类型的警告,但这与std :: string的继承有关。那些引起了真正的问题,因为我无法获得返回的字符串值。我能够通过使用%include std_string.i来解决这个问题,感谢这里找到的答案:swig Nothing known about base class 'std::string', ignored。我想在这种情况下我可能需要处理typedef的其他指令。
答案 0 :(得分:1)
这只是一个警告,说您将无法在ruby中实例化WEditType或WParmlistType。 将能够实例化派生的类WEdit和WParmList,而不是基类。仅当您要从WEditType派生新类或在ruby 中派生WParmlistType 时,这才重要。如果没有,您可以忽略该警告。请务必查看http://www.swig.org/Doc2.0/处的SWIG文档。例如,我对http://www.swig.org/Doc2.0/SWIGPlus.html#SWIGPlus_nn20所说的内容有一个很好的解释。此外,总是用谷歌搜索,特别是在SO上查看结果。搜索错误消息显示Avoid 'nothing known about [parent] class...' error in swig,其中提供了类似的解释。
答案 1 :(得分:1)
当您在SWIG中使用模板时,您可以让SWIG知道您使用的模板,以便为其生成包装器代码。如果是vector<WString>
,您可以使用:
%include <std_vector.i>
%template() std::vector<WString>;