型変換演算子を使って、戻り値の型によるオーバーロードを実現する
型変換演算子を使うとC++の言語使用でサポートされていない「戻り値の型によるオーバーロード」を実現することができる。以下のコードではstruct X内にA・Bの両型での型変換演算子を用意しているのがミソ。
#include<iostream> using namespace std; //戻り値の型 struct A{}; struct B{}; //このクラス内でA,B型への型変換演算子のオーバーロードを実施 struct X { operator A() {cout << "Call A" << endl; return A();} operator B() {cout << "Call B" << endl; return B();} }; //X型を返す関数を用意 X huga(){ return X(); } int main() { A a = huga(); B b = huga(); return 0; }
実行結果
Call A Call B