Hatena::ブログ(Diary)

C++でゲームプログラミング

2009-09-10

[][][]sq_push 関数オーバーロード

スクリプト関数引数を渡すときは、下のような感じに値をpushしていく。

sq_pushinteger(v, 10);                        // in t型
sq_pushfloat  (v, 0.45f);                     // float 型

std::string    str("Squireel");
sq_pushstring(v, "Squireel", str.size());    // 文字列

ただ、これだと渡す型用の関数を逐一選んで呼ばないとだめなので以下のように関数でラッピング。

namesapce squirrel{

    void
    push(HSQUIRRELVM v, int rhs){
        ::sq_pushinteger(v, rhs);
    }

    void
    push(HSQUIRRELVM v, float rhs){
        ::sq_pushfloat(v, rhs);
    }

    void
    push(HSQUIRRELVM v, const char* rhs){
        ::sq_pushstring(v, rhs, strlen(rhs) );
    }

};            // namesapce squirrel{

squirrel::push(v, 10);                // int 型が push される
squirrel::push(v, "Squirrel");        // 文字列も問題なく呼ばれる

引数の型のオーバーロードで解決。

これですっきり。