Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
swig在C+中运行的结果+;与python中的不同 void BK::BKTree::recursiveSearchNew(BK::Node*Node,std::vector*r,字符串w, 尺寸(t){ 大小\u t curDist=levenshteindication(节点->单词,w); 大小思维者=curDist-t; 大小\u t最大值=curDist+t; if(curDist单词,curDist); r->推回(p); } Node*child=Node->leftChild; 如果(!child)返回; while(儿童) { 如果(在范围内(儿童->距离、心智、最大距离)) 递归搜索新(子、r、w、t); child=child->rightsbibling; }} 此递归函数由SWIG编译,结果向量只返回最后一个元素,但C++返回正常结果。这是文件。 void BK::BKTree::recursiveSearchNew(BK::Node *node, std::vector<std::pair<std::string, int> > *r, string w, size_t t) { size_t curDist = levenshteinDistance(node->word, w); size_t minDist = curDist - t; size_t maxDist = curDist + t; if (curDist <= t) { std::pair<string, int> p; p = std::make_pair(node->word, curDist); r->push_back(p); } Node* child = node->leftChild; if (!child) return; while (child) { if (inRange(child->distance, minDist, maxDist)) recursiveSearchNew(child, r, w, t); child = child->rightSibling; }} %bk模块 %包括 %包括 %包括 %template()std::pair; %模板(PairVector)std::vector; %模板(StringVector)std::vector; %{ #包括“BKTree.h” %} %包括“BKTree.h”_Python_C++_C++14_Swig_Swig Template - Fatal编程技术网

swig在C+中运行的结果+;与python中的不同 void BK::BKTree::recursiveSearchNew(BK::Node*Node,std::vector*r,字符串w, 尺寸(t){ 大小\u t curDist=levenshteindication(节点->单词,w); 大小思维者=curDist-t; 大小\u t最大值=curDist+t; if(curDist单词,curDist); r->推回(p); } Node*child=Node->leftChild; 如果(!child)返回; while(儿童) { 如果(在范围内(儿童->距离、心智、最大距离)) 递归搜索新(子、r、w、t); child=child->rightsbibling; }} 此递归函数由SWIG编译,结果向量只返回最后一个元素,但C++返回正常结果。这是文件。 void BK::BKTree::recursiveSearchNew(BK::Node *node, std::vector<std::pair<std::string, int> > *r, string w, size_t t) { size_t curDist = levenshteinDistance(node->word, w); size_t minDist = curDist - t; size_t maxDist = curDist + t; if (curDist <= t) { std::pair<string, int> p; p = std::make_pair(node->word, curDist); r->push_back(p); } Node* child = node->leftChild; if (!child) return; while (child) { if (inRange(child->distance, minDist, maxDist)) recursiveSearchNew(child, r, w, t); child = child->rightSibling; }} %bk模块 %包括 %包括 %包括 %template()std::pair; %模板(PairVector)std::vector; %模板(StringVector)std::vector; %{ #包括“BKTree.h” %} %包括“BKTree.h”

swig在C+中运行的结果+;与python中的不同 void BK::BKTree::recursiveSearchNew(BK::Node*Node,std::vector*r,字符串w, 尺寸(t){ 大小\u t curDist=levenshteindication(节点->单词,w); 大小思维者=curDist-t; 大小\u t最大值=curDist+t; if(curDist单词,curDist); r->推回(p); } Node*child=Node->leftChild; 如果(!child)返回; while(儿童) { 如果(在范围内(儿童->距离、心智、最大距离)) 递归搜索新(子、r、w、t); child=child->rightsbibling; }} 此递归函数由SWIG编译,结果向量只返回最后一个元素,但C++返回正常结果。这是文件。 void BK::BKTree::recursiveSearchNew(BK::Node *node, std::vector<std::pair<std::string, int> > *r, string w, size_t t) { size_t curDist = levenshteinDistance(node->word, w); size_t minDist = curDist - t; size_t maxDist = curDist + t; if (curDist <= t) { std::pair<string, int> p; p = std::make_pair(node->word, curDist); r->push_back(p); } Node* child = node->leftChild; if (!child) return; while (child) { if (inRange(child->distance, minDist, maxDist)) recursiveSearchNew(child, r, w, t); child = child->rightSibling; }} %bk模块 %包括 %包括 %包括 %template()std::pair; %模板(PairVector)std::vector; %模板(StringVector)std::vector; %{ #包括“BKTree.h” %} %包括“BKTree.h”,python,c++,c++14,swig,swig-template,Python,C++,C++14,Swig,Swig Template,我觉得你很好。为你的问题创建一个可复制的例子。下面是我的示例,演示了模板的工作原理(SWIG 3.0.12、VS2015、Python 3.8): %module bk %include <std_pair.i> %include <std_vector.i> %include <std_string.i> %template() std::pair<std::string,int>; %template(PairVector) std::

我觉得你很好。为你的问题创建一个可复制的例子。下面是我的示例,演示了模板的工作原理(SWIG 3.0.12、VS2015、Python 3.8):

%module bk
%include <std_pair.i> 
%include <std_vector.i> 
%include <std_string.i> 
%template() std::pair<std::string,int>; 
%template(PairVector) std::vector<std::pair<std::string,int> >; 
%template(StringVector) std::vector<std::string>;

%{ 
 #include "BKTree.h" 
%} 
 %include "BKTree.h" 
%module bk

%{

#include <vector>
#include <string>
#include <utility>

void test(std::vector<std::pair<std::string,int>> *r)
{
    auto p = std::make_pair(std::string{"hello"},5);
    r->push_back(p);
    p = std::make_pair("goodbye",7);
    r->push_back(p);
}

%}

%include <std_pair.i>
%include <std_vector.i>
%include <std_string.i>
%template() std::pair<std::string,int>;
%template(PairVector) std::vector<std::pair<std::string,int> >;

void test(std::vector<std::pair<std::string,int>> *r);
>>> import bk
>>> v=bk.PairVector()
>>> bk.test(v)
>>> list(v)
[('hello', 5), ('goodbye', 7)]