並ゲームプログラマの書き捨て場

ゲームプログラマやってる私の日記、雑記、備忘録、公開場所

戻り値だけが違うオーバーロード関数

戻り値だけが違うオーバーロード関数

 

変な時間に目が覚めてしまったので、記事の移植を再開する。

2014/09/14の記事

 

戻り値だけが違うオーバーロード関数・・・それは夢への旅立ち。djannです。

 

 

前にどこかのブログで、戻り値だけが違うオーバーロード関数を作成したいというような要望を見かけた。

整数、浮動小数点数それぞれのπを取得するGetPi関数を例として考えていたので、こちらでもそれに準じることにする。

 

 

・要求事項

GetPiInt()やGetPiFloat()と書くと、コードの見た目的に美しくない

 

・解決策

テンプレートの特殊化によりGetPi()とGetPi()を作った。

 

 

これでは、結局コードの見た目的にも美しくないのではないだろうか?それとも、気にしては負けなのだろうか?

個人的には、どちらもGetPi()と記述出来るところまで来て、ようやく始まりな気がする。ということで、最低限そこまでを考えてみた。

 

 

struct GetPi_t {
	operator float(){ return 3.1415926535f; }
	operator int(){ return 3; }
	GetPi_t &operator()(){ return *this; }
} GetPi;

// 使用例.
int pi_integer = GetPi();
float pi_floating = GetPi();

 

 

以上のように用いる事が出来る。

が、このままだと残念ながら計算式の途中にGetPi()を用いる事が出来ない。もちろんキャストを行えば可能だが、その使い方の強制は、要求事項には見合わない。残念だ。