#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对控制台进行输入输出了。