プログラミング/組み込み言語/Sqrat/各クラスの説明 のバックアップ(No.2)


Sqratの各クラスについて説明しています。
Sqratの概要および導入については別ページを参照してください。

Object クラス … Sqratオブジェクトの基底クラス

解説

Object クラスは、以降に説明する次のクラスの基底クラスです。

自身のラップ対象となる HSQOBJECT インスタンスを保持しており、オブジェクトに共通する操作をサポートします。
当然ながら、このクラスを継承しているクラスのインスタンスにおいても後述する公開メンバ関数を使うことができます。

公開メンバ関数一覧

コンストラクタ
Object();
Object(HSQOBJECT o, HSQUIRRELVM v = DefaultVM::Get());
Object(const Object& so);
通常、直接このクラスのコンストラクタを呼び出すことはありません。
Cast<T>
template<class T> T Cast() const;
自身をテンプレート引数 T で指定したC++型として取得します。
T には、 int 等の基本型の他、あらかじめバインドしたクラス型等も指定できます。
GetInstanceUP
SQUserPointer GetInstanceUP(SQUserPointer tag = NULL) const;
自身に対してSquirrel API関数 sq_getinstanceup を呼び出し、得られたユーザポインタを取得します。
引数 tag に型チェックを行うべき型を渡せますが、結果は見ていないようです。
GetObject
virtual HSQOBJECT GetObject() const;
virtual HSQOBJECT& GetObject();
自身のラップ対象であるオブジェクトを取得します。
GetSlot
Object GetSlot(const SQChar* slot) const;
自身が保持する、指定した名前の変数の値を取得します。
詳しくは概要と導入の『変数の値の取得』の項を参照してください。
GetType
SQObjectType GetType() const;
自身のSquirrel型を取得します。
GetVM
HSQUIRRELVM& GetVM();
HSQUIRRELVM GetVM() const;
自身を保持しているVMを取得します。
IsNull
bool IsNull() const;
自身が null 値であるならば true 、そうでなければ false を返します。
Release
void Release();
自身の参照カウントをデクリメントします。
通常、直接呼び出す必要はありません。

Script クラス … スクリプトのコンパイルと実行

解説

Script クラスでは、Squirrelスクリプトのコンパイル、実行、およびバイトコードの保存を行うことができます。
コーディング例を次に示します。

すべて開くすべて閉じる
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
-
!
 
 
 
-
!
 
-
|
|
!
 
-
-
!
!
// 文字列をSquirrelスクリプトとしてコンパイル&実行
Script scriptA(vm);
scriptA.CompileString(_SC("print(\"Hello, Sqrat World.\\n\");"));
scriptA.Run();
 
// ファイルをSquirrelスクリプトとしてコンパイルし、バイトコードを保存
Script scriptB(vm);
try
{
    scriptB.CompileFile(_SC("test.nut"));
    scriptB.WriteCompiledFile(_SC("test.cnut"));
}
catch (const Exception& ex)
{
    // 例外メッセージを出力
    printfunc(vm, _SC("%s\n"), ex.Message().data());
}

公開メンバ関数一覧

継承元
コンストラクタ
Script(HSQUIRRELVM v = DefaultVM::Get());
CompileFile
void CompileFile(const Sqrat::string& path);
引数 path で指定されたパスにあるファイルをSquirrelスクリプトとしてコンパイルします。
コンパイルに失敗した場合は Sqrat::Exception インスタンスを例外としてスローします。
CompileString
void CompileString(const Sqrat::string& script);
引数 script に渡された文字列をSquirrelスクリプトとしてコンパイルします。
コンパイルに失敗した場合は Sqrat::Exception インスタンスを例外としてスローします。
Run
void Run();
コンパイルしたSquirrelスクリプトを実行します。
まだコンパイルしていない場合は何も行いません。
実行に失敗した場合は Sqrat::Exception インスタンスを例外としてスローします。
WriteCompiledFile
void WriteCompiledFile(const Sqrat::string& path);
コンパイルしたSquirrelスクリプトのバイトコードを、引数 path で指定されたパスのファイルに保存します。
まだコンパイルしていない場合は何も行いません。
保存されたファイルは、テキストのスクリプトファイルと同様に CompileFile メンバ関数に渡すことができます。

RootTable クラス、 Table クラス … テーブルの定義

解説

RootTable クラスは、文字通りルートテーブルを表します。
ルートテーブルは、C++でいうグローバル名前空間のようなものと考えるとわかりやすいです。

Table クラスは、テーブルを表します。
C++でいう名前空間のようなものと考えるとわかりやすいです。
基本的にはルートテーブルもしくは他のテーブルにバインドして用います。

この2クラスはどちらも TableBase クラスを継承しています。
両者の違いはコンストラクタでの処理のみです。

テーブル作成のC++コーディング例を次に示します。

すべて開くすべて閉じる
  1
  2
  3
  4
  5
  6
  7
  8
 
 
 
-
!
 
-
!
Table tableA(vm);
Table tableB(vm);
 
// tableB を tableA にバインド
tableA.Bind("B", tableB);
 
// tableA をルートテーブルにバインド
RootTable(vm).Bind("A", tableA);

上記のコードは、次のSquirrelスクリプトと同義です。

すべて開くすべて閉じる
  1
 
A <- { B = {} }

公開メンバ関数一覧

継承元
コンストラクタ
RootTable(HSQUIRRELVM v = DefaultVM::Get());
Table(HSQUIRRELVM v = DefaultVM::Get());
Bind
void Bind(const SQChar* name, Object& obj);
テーブル定義またはクラス定義 obj をこのテーブルに name で指定した名前でバインドします。
詳しくは概要と導入の『クラスやテーブルのバインド』の項を参照してください。
Func
template<class F> TableBase& Func(const SQChar* name, F method);
C/C++関数 method をこのテーブルに name という名前でバインドします。
詳しくは概要と導入の『クラスやテーブルのバインド』の項を参照してください。
GetFunction
Function GetFunction(const SQChar* name);
このテーブル内にあるSquirrel関数を取得します。
詳しくは概要と導入の『関数の取得と実行』の項を参照してください。
Overload
template<class F> TableBase& Overload(const SQChar* name, F method);
C++のオーバーロード関数 method をこのテーブルに name という名前でバインドします。
基本的な使い方は Func メンバ関数と同じですが、オーバーロード関数を定義したい場合はこちらを用います。
なお、登録できるオーバーロード関数は引数の数が異なるもののみです(引数の型が異なるだけだと上書きされます)。
Func メンバ関数を用いる場合と比べ、呼び出し時にラッパー関数を通す分だけ若干のオーバーヘッドがあります。
SetInstance
template<class V> TableBase& SetInstance(const SQChar* name, V* val);
name で指定した名前のSquirrel変数を作成し、インスタンス val をバインドします。
既に変数が存在する場合は上書きされます。
基本的には、あらかじめバインドしたクラス型のインスタンスを渡します。
ここで渡したインスタンスがSquirrel側で操作されると、C++側にも変更が反映されます。
詳しくは概要と導入の『変数への値のバインド』の項を参照してください。
SetValue
template<class V> TableBase& SetValue(const SQChar* name, const V& val);
name で指定した名前のSquirrel変数を作成し、値 val をバインドします。
既に変数が存在する場合は上書きされます。
値には基本型の他、あらかじめバインドしたクラス型も用いることができます(ただしコピー可能である必要があります)。
ここで渡した値はコピーされるため、Squirrel側で操作してもC++側には影響を及ぼしません。
詳しくは概要と導入の『変数への値のバインド』の項を参照してください。
SquirrelFunc
TableBase& SquirrelFunc(const SQChar* name, SQFUNCTION func);
Squirrel用関数 func をこのテーブルに name で指定した名前でバインドします。
C/C++関数をバインドしたい場合は Func メンバ関数を用いてください。

Class<C,A> クラス … クラスの定義

解説

C++クラスをSquirrelにバインドするためのクラスです。
コーディング例を次に示します。

すべて開くすべて閉じる
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
-
!
-
|
|
|
-
!
|
-
!
|
|
-
!
|
|
|
!
 
-
!
-
|
|
|
|
|
|
|
|
|
!
// バインド対象のクラス
class Sample
{
public:
    Sample() : _text(_SC("")), _num(1) {}
 
    // メンバ関数
    int mulNum(int value) { return (value * _num); }
 
    // アクセッサ(プロパティ)
    int getNum() const { return _num; }
    void setNum(const int& num) { _num = num; }
 
    // メンバ変数
    Sqrat::string _text;
 
private:
    int _num;
};
 
// Sample クラスをバインドする関数
void bindSampleClass(HSQUIRRELVM vm)
{
    using namespace Sqrat;
 
    RootTable(vm).Bind(
        _SC("Sample"),
        Class<Sample>(vm)
            .Func(_SC("mulNum"), &Sample::mulNum)               // メンバ関数
            .Prop(_SC("Num"), &Sample::getNum, &Sample::setNum) // プロパティ
            .Var(_SC("Text"), &Sample::_text)                   // メンバ変数
        );
}

上記の bindSampleClass 関数を通したVMでは、次のようなSquirrelスクリプトを実行できます。

すべて開くすべて閉じる
  1
  2
  3
  4
  5
  6
  7
  8
 
 
 
 
 
 
 
 
local sample = Sample();
sample.Num = 3;
local answer = sample.mulNum(5);
sample.Text = "ABC";
 
::print(answer + "\n");      // "15\n"
::print(sample.Num + "\n");  // "3\n"
::print(sample.Text + "\n"); // "ABC\n"

また、定義済みのクラスのインスタンスであれば、Squirrelの変数に設定したり、関数の引数に渡すこともできます。

テンプレート引数

template<
    class C,
    class A = DefaultAllocator<C>
> class Class;
class C
このクラスの定義対象となるC++クラス型を指定します。
class A
C++クラスに対するアロケータを指定します。
アロケータによって次のことが行われます。
  • インスタンス生成(コンストラクタ呼び出し)
  • インスタンスコピー
  • インスタンス解放(デストラクタ呼び出し)
Sqratで定義済みのアロケータは次の通りです(これ以外のアロケータを自前で定義することもできます)。
DefaultAllocator<C>
インスタンスの生成、コピー、解放をすべてサポートするアロケータです。
Class<T,A> クラスにおいてアロケータを省略した場合の既定のアロケータとなります。
NoConstructor
インスタンスの生成、コピー、解放のいずれもサポートしない(即ち何もしない)アロケータです。
Squirrelスクリプト内で勝手に生成やコピーを行われたくない場合等に用います。
CopyOnly<C>
インスタンスのコピーと解放をサポートし、生成はサポートしないアロケータです。
NoCopy<C>
インスタンスの生成と解放をサポートし、コピーはサポートしないアロケータです。

公開メンバ関数一覧

継承元
コンストラクタ
Class(HSQUIRRELVM v = DefaultVM::Get(), bool createClass = true);
引数 createClass は、このクラスを継承したクラスで独自の初期化処理を行う場合のみ false にします。
直接このクラスを用いる場合には false にしてはいけません。
Func
template<class F> Class& Func(const SQChar* name, F method);
対象C++クラスのメンバ関数 method をこのクラスに name という名前でバインドします。
GetFunction
Function GetFunction(const SQChar* name);
このクラスにバインドされている name という名前の静的メンバ関数を取得します。
GetObject
virtual HSQOBJECT GetObject() const;
virtual HSQOBJECT& GetObject();
Object クラスからオーバーライド。
自身のラップ対象となるクラス型のオブジェクトを取得します。
GlobalFunc
template<class F> Class& GlobalFunc(const SQChar* name, F method);
対象C++クラスのメンバ関数ではない関数 method を、このクラスに name という名前のメンバ関数としてバインドします。
関数 method の第一引数は対象クラスのポインタ型にする必要があります。
呼び出される際には、第一引数に呼び出し元のクラスインスタンスが渡されます。
Overload
template<class F> Class& Overload(const SQChar* name, F method);
対象C++クラスのオーバーロードメンバ関数 method をこのクラスに name という名前でバインドします。
基本的な使い方は Func メンバ関数と同じですが、オーバーロード関数を定義したい場合はこちらを用います。
なお、登録できるオーバーロード関数は引数の数が異なるもののみです(引数の型が異なるだけだと上書きされます)。
Func メンバ関数を用いる場合と比べ、呼び出し時にラッパー関数を通す分だけ若干のオーバーヘッドがあります。
Prop
template<class V> Class& Prop(
    const SQChar* name, V (C::*getMethod)() const, void (C::*setMethod)(const V&));
template<class V> Class& Prop(
    const SQChar* name, V (C::*getMethod)(), void (C::*setMethod)(V));
template<class V> Class& Prop(const SQChar* name, V (C::*getMethod)() const);
template<class V> Class& Prop(const SQChar* name, V (C::*getMethod)());
対象C++クラスの2つのメンバ関数 getMethod および setMethod を、このクラスに name という名前のプロパティとしてバインドします。
あるいは、取得専用プロパティ用に、メンバ関数 getMethod のみをバインドすることもできます。
設定できるメンバ関数プロトタイプの組み合わせは次の2通りです。
Type get() const;
void set(const Type& value);
Type get();
void set(Type value);
前者は値型に、後者は参照型もしくはポインタ型に用いることになるでしょう。
SetStaticValue
template<class V> Class& SetStaticValue(const SQChar* name, const V& val);
このクラスに name という名前の静的メンバ変数を作成し、値 val をバインドします。
既に変数が存在する場合は上書きされます。
値には基本型の他、あらかじめバインドしたクラス型も用いることができます(ただしコピー可能である必要があります)。
Squirrelでは、クラスの静的メンバ変数は定数値として扱われます。
SetValue
template<class V> Class& SetValue(const SQChar* name, const V& val);
このクラスに name という名前のメンバ変数を作成し、値 val をバインドします。
既に変数が存在する場合は上書きされます。
値には基本型の他、あらかじめバインドしたクラス型も用いることができます(ただしコピー可能である必要があります)。
ここで渡した値はコピーされるため、Squirrel側で操作してもC++側には影響を及ぼしません。
SquirrelFunc
template<class F> Class& SquirrelFunc(const SQChar* name, SQFUNCTION func);
Squirrel用関数 func をこのクラスに name という名前のメンバ関数としてバインドします。
StaticFunc
template<class F> Class& StaticFunc(const SQChar* name, F method);
関数 method をこのクラスに name という名前の静的メンバ関数としてバインドします。
関数 method は、対象C++クラスの静的メンバ関数でなくても構いません。
Var
template<class V> Class& Var(const SQChar* name, V C::* var);
対象C++クラスのメンバ変数 var をこのクラスに name という名前でバインドします。

DerivedClass<C,B,A> クラス … 継承クラスの定義

解説

あるC++クラスを継承しているC++クラスをSquirrelにバインドするためのクラスです。
継承元のC++クラスはあらかじめ Class<C,A> クラスもしくはこのクラスを用いてバインド済みである必要があります。

コーディング例を次に示します。

すべて開くすべて閉じる
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
-
!
-
|
-
!
|
|
-
!
-
|
!
!
 
-
!
-
|
|
|
-
!
|
|
|
|
!
 
-
!
-
|
|
-
!
|
|
|
|
|
|
-
!
|
!
// ベースクラス
class Base
{
public:
    // 純粋仮想関数
    virtual double getNum() const = 0;
    virtual void setNum(const double& num) = 0;
 
    // getNum の返り値を出力
    void printNum()
    {
        ::printf("%lf\n", getNum());
    }
};
 
// 継承クラス
class Derived : public Base
{
public:
    Derived() : _num(0.0) {}
 
    // 純粋仮想関数の実装
    virtual double getNum() const { return _num; }
    virtual void setNum(const double& num) { _num = num; }
 
private:
    double _num;
};
 
// バインド用関数
void bindBaseAndDerived(HSQUIRRELVM vm)
{
    using namespace Sqrat;
 
    // ベースクラスをバインド
    RootTable(vm).Bind(
        _SC("Base"),
        Class<Base, NoConstructor>(vm)
            .Prop(_SC("Num"), &Base::getNum, &Base::setNum)
            .Func(_SC("printNum"), &Base::printNum)
        );
 
    // 継承クラスをバインド
    RootTable(vm).Bind(
        _SC("Derived"), DerivedClass<Derived, Base>(vm));
}

上記の bindBaseAndDerived 関数を通したVMでは、次のようなSquirrelスクリプトを実行できます。

すべて開くすべて閉じる
  1
  2
  3
 
 
 
local derived = Derived();
derived.Num = 3.14;
derived.printNum();

また、 DerivedClass<C,B,A> クラスは Class<C,A> クラスを継承しており、 Class<C,A> クラスと同様にメンバ関数の追加等をすることができます。

テンプレート引数

template<
    class C,
    class B,
    class A = DefaultAllocator<C>
> class DerivedClass;
class C
このクラスの定義対象となるC++クラス型を指定します。
class B
C の継承元となるC++クラス型を指定します。
あらかじめバインド済みである必要があります。
class A
C++クラスに対するアロケータを指定します。
詳しくは Class<C,A> クラスのテンプレート引数の項を参照してください。

公開メンバ関数一覧

継承元
コンストラクタ
DerivedClass(HSQUIRRELVM v = DefaultVM::Get());

Enumeration クラス … 列挙定数値の定義

解説

Enumeration クラスは列挙定数値を定義するためのクラスです。
C/C++でいう enum 値のようなものですが、C/C++とは違い次の型の値を設定可能です。

  • int
  • float
  • SQChar*(文字列)

このクラスのインスタンスは、後述する ConstTable クラスのインスタンスにバインドして用います。
コーディング例は ConstTable クラスの解説の項を参照してください。

公開メンバ関数一覧

継承元
コンストラクタ
Enumeration(HSQUIRRELVM v = DefaultVM::Get(), bool createTable = true);
引数 createTable は、このクラスを継承したクラスで独自の初期化処理を行う場合のみ false にします。
直接このクラスを用いる場合には false にしてはいけません。
Const
virtual Enumeration& Const(const SQChar* name, const int val);
virtual Enumeration& Const(const SQChar* name, const float val);
virtual Enumeration& Const(const SQChar* name, const SQChar* val);
name という名前の列挙定数値 val を設定します。

ConstTable クラス … 定数テーブルの定義

解説

ConstTable クラスは定数値を定義するためのクラスです。
また、前述の Enumeration クラスで定義した列挙をバインドすることもできます。
定数値はSquirrelスクリプトのコンパイル時点で評価されるため、通常の変数を定数代わりに用いる場合と比べ、テーブルの走査が不要な分だけ処理速度が向上します。

コーディング例を次に示します。

すべて開くすべて閉じる
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
-
!
 
 
 
 
 
-
!
 
 
 
 
 
-
!
 
 
 
 
 
 
// 定数値の設定
ConstTable(vm)
    .Const(_SC("ConstInt"), 1)                      // int
    .Const(_SC("ConstFloat"), 3.5F)                 // float
    .Const(_SC("ConstStr"), _SC("string sample"))   // SQChar*
    ;
 
// 列挙定数値 Pos の設定
Enumeration pos(vm);
pos.Const(_SC("Left"),   0);
pos.Const(_SC("Center"), 1);
pos.Const(_SC("Right"),  2);
ConstTable(vm).Enum(_SC("Pos"), pos);
 
// 列挙定数値 Color の設定(別の書き方)
ConstTable(vm).Enum(
    _SC("Color"),
    Enumeration(vm)
        .Const(_SC("Red"),   0)
        .Const(_SC("Green"), 1)
        .Const(_SC("Blue"),  2)
    );

上記の処理を通したVMでは、次のようなSquirrelスクリプトを実行できます。

すべて開くすべて閉じる
  1
  2
  3
  4
 
 
 
 
::print(ConstInt + 3 + "\n"); // "4\n"
::print(ConstStr + "\n");     // "string sample\n"
::print(Pos.Center + "\n");   // "1\n"
::print(Color.Blue + "\n");   // "2\n"

なお、 ConstTable クラスは Enumeration クラスを継承しています。

公開メンバ関数一覧

継承元
コンストラクタ
ConstTable(HSQUIRRELVM v = DefaultVM::Get());
Const
virtual ConstTable& Const(const SQChar* name, const int val);
virtual ConstTable& Const(const SQChar* name, const float val);
virtual ConstTable& Const(const SQChar* name, const SQChar* val);
name という名前の定数値 val を設定します。
Enum
ConstTable& Enum(const SQChar* name, Enumeration& en);
name という名前の列挙 en をバインドします。

Function クラス … Squirrel関数のラッパー

解説

Function クラスは、Squirrelの関数をC++の関数的に扱う仕組みを提供します。
インスタンスの取得には Table クラスまたは Class<C,A> クラスGetFunction メンバ関数を用います。
また、 Function クラスのコンストラクタでも同等の処理が行えます。

コーディング例は概要と導入の『関数の取得と実行』の項を参照してください。

公開メンバ関数一覧

コンストラクタ
Function();
Function(const Function& sf);
Function(const Object& e, const SQChar* slot);
3つ目の形式は、テーブルまたはクラスである e から slot という名前の関数を取得してラップ対象とします。
即ち、 e.GetFunction(slot) と意味的には同じです。
Evaluate
template<class R> R Evaluate();
template<class R, class A1> R Evaluate(A1 a1);
template<class R, class A1, class A2> R Evaluate(A1 a1, A2 a2);
// 以下、引数9個分まで。
返り値を取得するタイプの関数呼び出しです。
詳しくは概要と導入の『関数の取得と実行』の項を参照してください。
Execute
void Execute();
template<class A1> void Execute(A1 a1);
template<class A1, class A2> void Execute(A1 a1, A2 a2);
// 以下、引数9個分まで。
返り値を取得しないタイプの関数呼び出しです。
詳しくは概要と導入の『関数の取得と実行』の項を参照してください。
GetEnv
HSQOBJECT& GetEnv();
このクラスのラップ対象である関数が属するテーブルまたはクラスのオブジェクトを取得します。
GetFunc
HSQOBJECT& GetFunc();
このクラスのラップ対象である関数のオブジェクトを取得します。
GetVM
HSQUIRRELVM& GetVM();
自身を保持しているVMを取得します。
IsNull
bool IsNull();
自身が null 値であるならば true 、そうでなければ false を返します。
関数が取得できなかった場合等に null 値となります。
Release
void Release();
自身および自身が属するテーブルまたはクラスの参照カウントをデクリメントし、自身を null 値とします。
デストラクタでも呼び出されるため、通常このメンバ関数を直接呼び出す必要はありません。
operator()
void operator()();
template<class A1> void operator()(A1 a1);
template<class A1, class A2> void operator()(A1 a1, A2 a2);
// 以下、引数9個分まで。
Execute メンバ関数と同じです。
詳しくは概要と導入の『関数の取得と実行』の項を参照してください。

DefaultVM クラス … 既定のVMの設定

解説

後述するSqratの各オブジェクトクラスは、コンストラクタの引数にVMをとります。

すべて開くすべて閉じる
  1
  2
  3
  4
 
 
 
-
Table myTable(vm);
Class<Foo> myClass(vm);
Script myScript(vm);
// etc...

この仕様によって複数のVMを使い分けることができるのですが、VMを1つしか使わない場合は逆に冗長なものとなります。
そこで、 DefaultVM クラスを使うことにより、既定のVMを設定することができます。

すべて開くすべて閉じる
  1
  2
  3
  4
  5
  6
  7
  8
-
!
 
-
!
 
 
-
// 既定のVMを設定
DefaultVM::Set(vm);
 
// 引数のVMを省略すると DefaultVM::Get() が使われる
Table myTable();
Class<Foo> myClass();
Script myScript();
// etc...

複数のVMを使う場合でも、どちらか片方を既定のVMとし、もう片方を使う場合は引数を省略しないようにすることで使い分けは可能です。

公開メンバ関数一覧

Get
static HSQUIRRELVM Get();
既定のVMを取得します。
各オブジェクトクラスのコンストラクタ引数の既定値として用いられます。
なお、一度も Set メンバ関数を呼びだしていない場合、この関数は不定値を返します。
Set
static void Set(HSQUIRRELVM vm);
既定のVMを設定します。

Exception クラス … Sqrat例外クラス

解説

Sqratがスローする例外クラスです。
例外発生時のエラーメッセージをメンバとして持ちます。

現時点では Script クラスの各メンバ関数でのみ用いられています。

公開メンバ関数一覧

コンストラクタ
Exception(const Sqrat::string& msg);
Exception(const Exception& ex);
Message
const Sqrat::string Message() const;
例外メッセージを取得します。