从 Go 迭代 `std::vector<std::string>`?
Iterate `std::vector<std::string>` from Go?
我正在尝试使用 Go 中的 C++ 库。我对 Go 也没什么经验。
我的 C++ 方法如下所示:
std::vector<std::string> getAttribute(const std::string key);
我的 .swigcxx
文件中有这个:
%include "std_string.i"
%include "std_vector.i"
%include "MyCode.h"
%template(StringVector) std::vector<std::string>;
%{
#include "MyCode.h"
%}
但是 Go 不想让我访问它。我通过以下方式打印了一些信息:
attribs := ipuInfo.GetAttribute("foo")
fmt.Printf("%T\n", attribs)
fmt.Printf("%+v\n", attribs)
然后我得到:
bar.SwigcptrStringVector
<random number - address perhaps?>
但我不知道如何获取向量的各个内容。我试过:
for index, val := range bar.GetAttribute("foo") {
}
但这给出了:
cannot range over bar.GetAttribute("foo") (type interface {})
我也试过对其调用 .Capacity()
方法,但未声明(来自 https://blog.nobugware.com/post/2020/c-bindings-in-go-and-swig/)。我也试过 attribs[0]
但它也不喜欢那样。
有人有什么建议吗?
非常感谢。
看起来是函数重载的问题。我有 2 个具有相同名称和不同参数的 getAttribute
函数。当我重命名该方法使其唯一时,Capacity()
和 Get()
起作用(尽管 range
不起作用)。
看起来 Swig 试图生成包装器代码来调用正确的方法,但无法处理不同的 return 类型
我正在尝试使用 Go 中的 C++ 库。我对 Go 也没什么经验。
我的 C++ 方法如下所示:
std::vector<std::string> getAttribute(const std::string key);
我的 .swigcxx
文件中有这个:
%include "std_string.i"
%include "std_vector.i"
%include "MyCode.h"
%template(StringVector) std::vector<std::string>;
%{
#include "MyCode.h"
%}
但是 Go 不想让我访问它。我通过以下方式打印了一些信息:
attribs := ipuInfo.GetAttribute("foo")
fmt.Printf("%T\n", attribs)
fmt.Printf("%+v\n", attribs)
然后我得到:
bar.SwigcptrStringVector
<random number - address perhaps?>
但我不知道如何获取向量的各个内容。我试过:
for index, val := range bar.GetAttribute("foo") {
}
但这给出了:
cannot range over bar.GetAttribute("foo") (type interface {})
我也试过对其调用 .Capacity()
方法,但未声明(来自 https://blog.nobugware.com/post/2020/c-bindings-in-go-and-swig/)。我也试过 attribs[0]
但它也不喜欢那样。
有人有什么建议吗?
非常感谢。
看起来是函数重载的问题。我有 2 个具有相同名称和不同参数的 getAttribute
函数。当我重命名该方法使其唯一时,Capacity()
和 Get()
起作用(尽管 range
不起作用)。
看起来 Swig 试图生成包装器代码来调用正确的方法,但无法处理不同的 return 类型