今天调试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);
};
}
Run Code Online (Sandbox Code Playgroud)
删除constfrom const ourLib::Char * tmp导致我描述的错误.
说你有以下功能:
void test( const char*& pRef)
{
static const char somedata[] = { 'a' ,'b', 'c', '\0'};
pRef = somedata;
}
Run Code Online (Sandbox Code Playgroud)
如果你传入一个非const char*,那么当test()返回时,编译器就会失去p指向的东西const.
这与本C++ FAQ Lite问题中给出的原因基本相同(处理指针指针而不是指针引用):
| 归档时间: |
|
| 查看次数: |
4426 次 |
| 最近记录: |