我们正在尝试使用SWIG将C++模板库封装为不同语言(Python、Java、R等)的库。我们不想在目标语言中为每个类型实例化使用不同的类名。相反,我们希望获得一个单一的分派类(就像SWIG处理重载函数一样)。由于我们有许多类,我们还想让SWIG从给定的C++头文件中提取类和方法。
例如:假设一个只读的C++头文件包含:
现在我们想要为SWIG编写一个接口文件,创建一个能够调用正确模板实例的单个类(如果在每个函数调用中发生也可以)。在Python中,我们想要允许像这样的操作。
例如:假设一个只读的C++头文件包含:
template< typename T >
class Foo {
Foo(const T * t);
const T* getVal() const;
void setVal(const T* t);
};
现在我们想要为SWIG编写一个接口文件,创建一个能够调用正确模板实例的单个类(如果在每个函数调用中发生也可以)。在Python中,我们想要允许像这样的操作。
from foo import Foo
v_int = Foo(1)
v_int.setVal(v_int.getVal())
v_str = Foo("string")
v_str.setVal(v_str.getVal())
我有一些手动完成这个操作的思路,但基本上意味着我必须在C++中编写自己的包装类,并将模板类定义的每个成员函数都包含在其中。随着我们想要包装的类数量增多,这变得不切实际。
有什么想法吗?例如,在SWIG接口文件中是否有一种“迭代”所有成员函数的方法?