今天在调试 SWIG 类型映射时遇到了一个有趣的问题。有人愿意告诉我为什么 Visual C++ 2008 在从 转换为 时会抛出“转换丢失限定符”错误ourLib::Char *吗const ourLib::Char * &?我认为Type *->const Type *是一个微不足道的转换,并且(在调用函数时)Lvalue->Lvalue &也是如此。
编辑:我们最终采用的解决方案:
// ourLib::Char is a typedef'ed char on Win32
%typemap(in) const char* (const ourLib::Char* tmp)
{
if (!bapiLua::LuaTraits<ourLib::Char*>::FromLuaObject(L, $argnum, tmp)) SWIG_fail;
$1 = const_cast<char *>(tmp);
}
// And in a different source file, already written:
namespace bapiLua {
template<>
struct LuaTraits<ourLib::Char*>
{
static ourLib::Bool FromLuaObject(lua_State* L, int pos, const ourLib::Char*& o_result);
};
}
删除constfromconst ourLib::Char * tmp会导致我描述的错误。