// 29_29-10.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <typeinfo>

using namespace std;

template<typename T, int size> class mystack {
private:
	int ct;
	T data[size+1];
public:
	mystack() { ct = 0; }
	void push(T dt) {
		if (ct < size) {
			data[++ct] = dt;
		}
	}
	T pop() {
		if (ct > 0) {
			return data[ct--];
		}
		else {
			return 0;
		}
	}
	void stat();
};

// 状態を表示する関数
template<typename T, int size> void mystack<T, size>::stat()
{
	cout << "T=" << typeid(T).name();
	//cout << "T=" << typeid(data[0]).name();	// これでもよい
	cout << ", size=" << size << '\n';
}

int _tmain(int argc, _TCHAR* argv[])
{
	mystack<int, 50> istk;	// int型、size=50対応のクラス
	mystack<double, 80> dstk;	// double型、size=80対応のクラス

	istk.push(100);
	cout << istk.pop() << '\n';
	istk.stat();
	dstk.push(22.22);
	cout << dstk.pop() << '\n';
	dstk.stat();



	MessageBox(NULL, _T("Check Console Window"), L"MessageBox", MB_OK);

	return 0;
}

