【发布时间】:2021-11-03 08:51:47
【问题描述】:
我正在尝试创建比较两个向量的 C++ 扩展。
ddd.h 文件
using namespace std;
#include <vector>
#include <algorithm>
#include <functional>
#include <numeric>
#include <iostream>
#include <assert.h>
#include <cstring>
vector<bool> comparer_cpp(vector<vector<string> > v, vector<string> v0);
ddd.i 文件
%module ddd
%{
#define SWIG_FILE_WITH_INIT
#include "ddd.h"
%}
%include "std_vector.i"
namespace std {
%template(Line) vector<string>;
%template(Array) vector<vector<string> >;
}
%{
extern vector<bool> comparer_cpp(vector<vector<string> > v, vector<string> v0);
// extern vector<string> Line;
// extern vector<vector<string> > Array;
%}
%include ddd.h
extern vector<bool> comparer_cpp(vector<vector<string> > v, vector<string> v0);
// extern vector<string> Line;
// extern vector<vector<string> > Array;
ddd.cpp 文件
#include "ddd.h"
// vector<bool> comparer_cpp(const vector<vector<string> >& v, const vector<string>& v0) {
vector<bool> comparer_cpp(vector<vector<string> > v, vector<string> v0) {
vector<bool> result;
for(unsigned int i=0;i<v.size();i++)
{
result.push_back((v0==v[i]));
}
// for(unsigned int i=0;i<result.size();i++)
// {
// cout<<result[i]<<endl;
// }
return result;
}
编译通过,没有错误
但是,当我测试代码时,我无法将 python 列表传递给 C++ 向量
>>> import ddd
>>> ddd.Line(["F06", "H10", "R07"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/young/Downloads/temp/cpp_swig_test/swig/ddd.py", line 201, in __init__
_ddd.Line_swiginit(self, _ddd.new_Line(*args))
TypeError: Wrong number or type of arguments for overloaded function 'new_Line'.
Possible C/C++ prototypes are:
std::vector< string >::vector()
std::vector< string >::vector(std::vector< string > const &)
std::vector< string >::vector(std::vector< string >::size_type)
std::vector< string >::vector(std::vector< string >::size_type,std::vector< string >::value_type const &)
我的最终目标是比较两个向量并得到以下结果
vec1d=ddd.Line(["F06", "H10", "R07"])
vec2d=ddd.Line([["F06", "H10", "R07"], ["F06", "H10", "L20"], ["F06", "H10", "S12"]])
result_tuple=ddd.comparer_cpp(vec2d,vec1d)
请纠正我做错了什么
【问题讨论】:
-
这不是你问题的答案,但你也可以考虑pybind11。