スクリプト側の関数の呼び出し方

function main(){
    print("Hello Squrrel World\n");
}

上ののようなスクリプトが定義されていた場合に、

script"main"();

こんな感じでC++側からスクリプト側の関数の呼び出しを行いたい。


で、実装するとこんな感じ?

// 関数の戻り値の型を定義
template< typename T >
struct type2type{
	typedef T type;
};
type2type	void_;
type2type	int_;
type2type	char_;

struct script{
    
    template< typename result >
    result operator ()(type2type){
        // 関数の呼び出しの実装
    }
    
    // 関数名を設定
    void set(const char* rhs){
        mFuncName = rhs;
    }
    
    // 演算子を使用して関数名を設定
    script& operator (const char* name){
        set(name);
        return *this;
    }
    
private:
    std::string    mFuncName;
};

script    s;
s["main"](void_);

最初は、operator|()で呼び出しを行っていたんだけど、()演算子の方が優先順位が高く、

(script|"main")(void_)

の様にしてやらないとダメなので演算子で対応。
確かに、
の方がわかりやすいかな?


関数の戻り値の型は関数オブジェクトの第一引数に渡してやってます。
他によさげな実装方法が思い浮かびませんでした…。
んーもうちょっと改良の余地があるかな?
次は複数の引数に対応予定