KOTET'S PERSONAL BLOG

#dlang In式のオーバーロード2種

Created: , Last modified:
#dlang #tech

これは1年以上前の記事です

ここに書かれている情報、見解は現在のものとは異なっている場合があります。

普通にドキュメントを読めば書いてあることなんだけどなぜか調べるのに手間取ったので、専用の記事を書く。 やりたいこと1つに対応して1つの記事があるというのも人によっては役に立つと思っている。 タイトルで調べたいことの答えが書いてあるとわかるというのは利点だと思う。

以下のコードの実行例 : DPaste - Paste #23990 - pastebin, online compiler and collaboration tool dedicated to D Programming Language

方法1 - opBinary

class test1
{
	bool opBinary(string op)(int key)
	{
		static if (op == "in") return true;
	}
	
	bool opBinaryRight(string op)(int key)
	{
		static if (op == "in") return false;
	}
}

ドキュメント に書いてある方法。opBinarytest1 in keyopBinaryRightkey in test1をオーバーロードできる。 この方法は二項演算子全般をオーバーロードでき、与えられた演算子に応じて処理を変えたり文字列Mixinできたりする。

方法2 - opIn (非推奨)

class test2
{
	bool opIn(int key)
	{
		return true;
	}
	
	bool opIn_r(int key)
	{
		return false;
	}
}

In式のオーバーロードがしたいだけならこちらのほうがわかりやすいと思う。ドキュメントにないなと思って調べたら どうやらD1の書き方らしい。 将来サポートされる保証はないとのことなので、執筆時点で動くけれど使わないほうが良いのだろう。