関数やクラスのメソッド中に、ローカルにクラスを定義できるってのを知った

クラスの中にクラスを書けることはpimlなんかを通じて知っていたのだが、関数の中にもローカルにクラスを定義出来ることは知らなかったのでメモ。ファンクタとか使うのに便利そう。

#include<iostream>
void hoge()
{
	class Hoge
	{
	public:
		void Shout(){std::cout << "Hello, World" << std::endl;}
	};
	Hoge().Shout();
}
int main()
{	
	hoge();
	return 0;
}

同様にクラスのメソッドの中でもイケた。

#include<iostream>
class Moge
{
public:
	void Shout(){
		class Hoge
		{
		public:
			void Shout(){std::cout << "Hello, World" << std::endl;}
		};
		Hoge().Shout();
	}
};
int main()
{	
	Moge().Shout();
	return 0;
}

両方とも実行するとちゃんと

Hello, World

と表示される。