#pragma once template<int k> class _Int2Type {enum{_A=k};};
template <bool e1,bool e2> class _enable { public: static void enable() { es(_Int2Type<e1>()); ei(_Int2Type<e2>()); } private: static void ei(_Int2Type<true>) { static std::ofstream conout("con"); static std::ifstream conin("con"); if (conout.is_open()) std::cout.rdbuf(conout.rdbuf()); if (conin.is_open()) std::cin.rdbuf(conin.rdbuf()); } static void ei(_Int2Type<false>){} static void es(_Int2Type<false>){} static void es(_Int2Type<true>) { FILE *pf; if (pf=fopen("con","rt")) _iob[0]=*pf; if (pf=fopen("con","wt")) _iob[2]=_iob[1]=*pf; } }; template <bool _EnableStdio,bool _EnableIostream> void OpenConsole() { static bool first=true; if (first) { first=false; if (AllocConsole()) { _enable<_EnableStdio,_EnableIostream>::enable(); } } } |
使用方法:
OpenConsole<true,true>();
接下来就可以使用 cin,cout,printf,scanf对控制台进行输入输出了。