D言語雑記

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

雑記です。順次加筆訂正していきます。初学者向き?

dubでオレオレライブラリを使いたいとき

$ ls | grep oreoreLib
oreoreLib/
$ dub add-local oreoreLib

配列の存在確認をしたい時

auto arr = ["hoge", "piyo"]
auto res = find(arr, "hoge");

if (res.empty) {
    writeln("Nothing");
} else {
    writeln(res[0]); // -> hoge
}

テンプレートのネスト

template tmpA(string a) {
    template tmpB(string b) {
        void func() {
            writeln(a ~ b);
        }
    }
}

tmpA!("hoge").tmpB!("piyo").func(); // -> hogepiyo

alias A = tmpA!("foo");
A.tmpB!("boo").func(); // -> fooboo

with(tmpA!("aaa")) {
    tmpB!("bbb").func(); // -> aaabbb
    tmpB!("ccc").func(); // -> aaaccc
}

テンプレートのオーバーライド

template tmp(string a, string b) {
    void func() {
        writeln(a ~ b);
    }
}

template tmp(string a) {
    mixin tmp!(a, "piyo");
}

void main() {
    tmp!("foo", "boo").func(); // -> fooboo
    tmp!("hoge").func(); // -> hogepiyo
}
template tmpA(string a) {
    template tmpB(string b) {
        void func() {
            writeln(a ~ b);
        }
    }
}

template tmpA(string a, string b) {
    mixin tmpA!(a).tmpB!(b);
}

void main() {
    tmpA!("hoge").tmpB!("piyo").func(); // hogepiyo
    tmpA!("foo", "boo").func(); // -> fooboo
}

文字列mixin

class Hoge {
    void piyo(string s) {
        writeln(s);
    }
}

template tmp(string cls) {
    void func() {
        mixin("
        auto clsIns = new " ~ cls ~ "();
        clsIns.piyo(\"" ~ cls ~ "\");
        ");
    }
}

void main() {
    tmp!("Hoge").func(); // -> "Hoge"
}