Сегодня я столкнулся с интересной проблемой при отладке типографских карт 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);
};
}
Удаление const
из const ourLib::Char * tmp
вызывает описанную мной ошибку.