戻り値だけが違うオーバーロード関数
戻り値だけが違うオーバーロード関数
変な時間に目が覚めてしまったので、記事の移植を再開する。
2014/09/14の記事
戻り値だけが違うオーバーロード関数・・・それは夢への旅立ち。djannです。
前にどこかのブログで、戻り値だけが違うオーバーロード関数を作成したいというような要望を見かけた。
整数、浮動小数点数それぞれのπを取得するGetPi関数を例として考えていたので、こちらでもそれに準じることにする。
・要求事項
GetPiInt()やGetPiFloat()と書くと、コードの見た目的に美しくない
・解決策
テンプレートの特殊化により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()を用いる事が出来ない。もちろんキャストを行えば可能だが、その使い方の強制は、要求事項には見合わない。残念だ。