使用swig实现Lua中C++重载构造函数的字符串和十六进制整数

我正在使用swig从Lua中创建C++对象,在这种情况下,我有对int和std::string进行过载的构造函数。一切都很好,除了当我尝试使用包含十六进制值的字符串创建对象时。

works_fine = MyObj("foo") -- MyObj::MyObj(std::string v) [v = "foo"]
works_fine = MyObj(3)     -- MyObj::MyObj(int v) [v = 3]

not_working = MyObj("0xAB") -- MyObj::MyObj(int v) [v = 171]

显然,它将十六进制字符串转换为int(在这种情况下是171)。 有没有办法强制十六进制字符串成为字符串?

原文链接 https://stackoverflow.com/questions/69507071

点赞
stackoverflow用户7714745
stackoverflow用户7714745

我用一个变通方法解决了它:

我创建了一个新的 swig obj MyString,并重载了 MyString 的 MyObj 构造函数,而不是 std::string

works_fine = MyObj("foo") -- 不行
works_fine = MyObj(3)     -- MyObj::MyObj(int v) [v = 3]

not_working = MyObj(MyString("0xAB")) -- MyObj::MyObj(MyString v) [v = "0xAB"]

看起来不太干净,如果有其他想法请分享

2021-10-11 09:43:02