ゲーム作りは楽しい

なんか書く

メタクラスについて勉強してみました。

メタクラスについて勉強してみた。

class とか structっていうキーワードを使う箇所をユーザー定義したものに変えて

my_class Hoge{};

みたいに使います。
んで、 何ができるかというと

例えばC++ではstructはデフォルトpublic, classはprivateっていう話がありますが、 そーゆーデフォルト時のルールを決めることができたり、違反したらコンパイルエラーにできたりする。
メンバ変数は指定しなければprivateになる。すべてprivateじゃなければコンパイルエラー!みたいな

例だとinterface メタクラスを例に上げていた

$class interface
    {
     // デストラクタ定義
    ~interface() noexcept { }
    constexpr
    {
        // メンバ変数はもったらコンパイルエラー
        compiler.require($interface.variables().empty(), "interfaces may not contain data");
        for (auto f : $interface.functions())
        {
            // コピー、ムーブはコンパイルエラー
            compiler.require(!f.is_copy() && !f.is_move(), "interfaces may not copy or move; consider a" " virtual clone() instead");
            // アクセス指定子いないならpublicにする
            if (!f.has_access()) f.make_public();
            // public以外があったらコンパイルエラー
            compiler.require(f.is_public(), "interface functions must be public");
            // 純粋仮想関数とする
            f.make_pure_virtual();
        }
    }
};
interface IHoge
{
    void hoge();
};

class IHoge
{
    public:
    virtual ~IHoge() = 0;
    virtual void hoge() = 0;
};

みたいになるという感じですかね

未来の話なのでどうなることかわからんが、面白そうだった

参考

https://www.fluentcpp.com/2017/08/04/metaclasses-cpp-summary/