型変換演算子を使って、戻り値の型によるオーバーロードを実現する

型変換演算子を使うと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