无法获取 wig %ignore 以忽略命名空间中的类,从而导致编译错误

Cant get swig %ignore to ignore class in namespace resulting in compile error

本文关键字:错误 编译 wig 获取 %ignore 命名空间      更新时间:2023-10-16

我在标头中声明了一个类,该类在运行 swig 时给出编译错误:

namespace nsA
{
namespace nsB
{
#define DISABLE_COPYING_AND_ASSIGNING(ClassName) ClassName(const ClassName&) = delete; 
ClassName& operator=(const ClassName&) = delete         
class myClass
{
public:
DISABLE_COPYING_AND_ASSIGNING(myClass);
myClass(myClass_t opaque);
myClass(myClass&& other);
~myClass();
uint32_t myMethod() const;                
private:
myClass_t mOpaque;                
};
enum class myEnum
{
A= 0,
B= 1
};
}
}

如果我将此类保留在命名空间中,则会收到此错误:

错误 C2280 'nsA::nsB::myClass::myClass(const nsA::nsB::myClass &(':尝试引用已删除的函数

这是我在 swig 配置文件中尝试过的内容:

%ignore nsA::nsB::myClass; // Doesn't work
%ignore *myClass; // Doesn't work

我也尝试忽略所有内容并取消忽略命名空间中的其他元素,但也不起作用:

%ignore nsA::nsB; // This works to ignore the entire namespace
%rename("%s") nsA::nsB::myEnum;  // This does not work to re-include the struct
  1. 为什么错误指向 nsA::nsB::myClass::myClass 而不是 nsA::nsB::myClass?
  2. 关于导致 swig 导致此问题的任何提示 错误?
  3. 尝试忽略/取消类时我做错了什么 在啪?

这实际上不是命名空间的问题。SWIG试图在包装的代码中调用nsA::nsB::myClass的复制构造函数(称为nsA::nsB::myClass::myClass(。

据我所知,SWIG 无法处理仅移动类。有关更新,请参阅 https://github.com/swig/swig/issues/999。