1

今日、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);
};
}

constfromを削除するconst ourLib::Char * tmpと、説明したエラーが発生します。

4

2 に答える 2

9

次の関数があるとします。

void test(  const char*& pRef)
{
    static const char somedata[] = { 'a' ,'b', 'c', '\0'};
    pRef = somedata;
}

非 const を渡した場合、返されたchar*ときに、コンパイラはが を指してtest()いるという事実を失います。pconst

これは、この C++ FAQ Lite の質問 (ポインター参照ではなくポインターからポインターへの対処) で与えられたのと本質的に同じ理由です。

于 2009-08-10T21:16:19.080 に答える