我有一个 SWIG 包装的向量。我怎么知道它包含哪种类型?

Posted

技术标签:

【中文标题】我有一个 SWIG 包装的向量。我怎么知道它包含哪种类型?【英文标题】:I have a SWIG-wrapped vector. How can I tell which type it contains? 【发布时间】:2017-02-28 17:05:51 【问题描述】:

在我的.i 文件中,我有很多这样的矢量模板:

%template(VectorInt) std::vector<int>;

我需要获取这些向量之一,并构造一个该向量包含的任何类型的实例。

我知道我可以获取向量的类型,并使用我对命名约定的了解来计算出与所需类型相同的字符串,并从中调用构造函数。

我不能指望向量不为空。

有没有更可靠的方法来获取这些信息?

【问题讨论】:

没有什么能阻止你拥有一个 boost::any 的向量,它有一个类型映射,这意味着向量的每个元素都有不同的类型。我想你真的想用 Python 写鸭子。 @Flexo 这一次让我很高兴我不能使用 Boost。 【参考方案1】:

如果向量已经有元素,则从任何元素中获取类型信息。

否则,你可以在vector上调用resize,得到你需要的,然后再调用clear

【讨论】:

以上是关于我有一个 SWIG 包装的向量。我怎么知道它包含哪种类型?的主要内容,如果未能解决你的问题,请参考以下文章

在 swig 上包装返回向量<T>

如何使用 SWIG 包装许多 .h 文件并包含任何依赖项?

使用 SWIG 包装第 3 方类/数据类型

包装 std::vector 的 std::vectors,C++ SWIG Python

用 SWIG 包装 C 结构

Swig 包装 GLM 库