Miyabiarts.net

一年に一度の更新頻度

カテゴリーアーカイブ: Lua

Luaの文字列とQStringの相互変換

Luaの文字列は、C++側ではstd::stringで受け取ってしまうのでQtの文字列QStringを引数にするような関数をLua側に公開するためには一工夫する必要があります。
luabindを用いると、以下のように書くことで、Luaの文字列とQStringを相互変換することができます。

namespace luabind
{
  template
  struct default_converter
    : native_converter_base
    {
      static int compute_score( lua_State *L, int index )
      {
        switch( lua_type( L, index) )
        {
          case LUA_TNIL:
          case LUA_TSTRING:
          {
            return 0;
         }
         default:
         {
           return -1;
         }
       }
    }

    QString from( lua_State *L, int index )
    {
      switch( lua_type( L, index ) ) 
      {
        case LUA_TNIL:
        {
          return QString();
        }
        case LUA_TSTRING:
        default:
        {
          return QString( lua_tostring( L, index ) );
       }
      }
    }

    void to( lua_State * L, QString const& x )
    {
      lua_pushstring( L, x.toStdString().c_str() );
    }
  };

  template
  struct default_converter
  : default_converter
  {};
}

つまり、下のような関数がLua側に公開できるということです。

void print( const QString &text )
{
  qDebug() << text;
}