EOS contract の雛形
eosio.cdt の contract クラスは次のように定義されています。ただし、オリジナルのコードからコメントなどを省いています。 code:contract.hpp
class contract {
public:
contract( name receiver, name code, datastream<const char*> ds ):
_self(receiver),_code(code),_ds(ds) {}
inline name get_self() const { return _self; }
inline name get_code() const { return _code; }
inline datastream<const char*> get_datastream() const { return _ds; }
protected:
name _self;
name _code;
datastream<const char*> _ds = datastream<const char*>(nullptr, 0);
}
まずは、protected に指定されているものから見ます。インスタンスがここで定義された変数を読み書きすることはできませんが、継承したクラスの中では可能です。
code:contract.hpp
name _self;
name _code;
datastream<const char*> _ds = datastream<const char*>(nullptr, 0);
普通の C++ コードには現れない型が2つあります。
name 型は uint64 型に変換できるように長さが制限された文字列です。
datastream<const char*> は、EOS で扱う様々な型の変数をバイナリにシリアライズしたものです。
_self, _code, _ds を読み込むための関数は public に指定されているので、インスタンスはこの関数を通じて変数の中身を知ることができます。
code:contract.hpp
inline name get_self() const { return _self; }
inline name get_code() const { return _code; }
inline datastream<const char*> get_datastream() const { return _ds; }
_self, _code, _ds は、引数で与えたものをそのまま代入しています。
code:contract.hpp
contract( name receiver, name code, datastream<const char*> ds ):
_self(receiver),_code(code),_ds(ds) {}
例えば _self(receiver) は、_self を引数 receiver で初期化する(代入する)といった具合です。
_ds についてはもう少し詳しく調べる必要がありそうです。
関連ワード