关于 c++ 类型判别
  • 板块学术版
  • 楼主蒟酱厂妹
  • 当前回复14
  • 已保存回复14
  • 发布时间2022/4/19 12:50
  • 上次更新2023/10/28 03:20:13
查看原帖
关于 c++ 类型判别
310818
蒟酱厂妹楼主2022/4/19 12:50

如题 我写了个 fread fwrite 重载 c++ 输入,但是发现里面有许多类型是重复的比如说 signed short,signed int,signed long,signed long long 以及 unsigned short,unsigned int,unsigned long,unsigned long long,函数一模一样但是我不得不重载很多很多次,这要怎么办

附 code:(还没写输出)

class fastIO{
private:
	char ibuf[1000007],*p1=ibuf,*p2=ibuf,obuf[1000007],*p3=obuf,sta[70];
public:
	int get(){return p1==p2&&(p2=(p1=ibuf)+fread(ibuf,1,1000007,stdin),p1==p2)?EOF:*p1++;}
	void put(char x){p3-obuf<1000007?*p3++=(x):(fwrite(obuf,p3-obuf,1,stdout),p3=obuf,*p3++=(x));}
	fastIO &operator>>(bool &t){
		t=0;int c=fio.get();
		for(;!isdigit(c);c=fio.get());
		for(;isdigit(c);c=fio.get())t=t*10+(c^48);
		return fio;
	}
	fastIO &operator>>(unsigned char &t){
		for(t=fio.get();isspace(t);t=fio.get());
		return fio;
	}
	fastIO &operator>>(signed char &t){
		for(t=fio.get();isspace(t);t=fio.get());
		return fio;
	}
	fastIO &operator>>(signed int &t){
		t=0;bool y=0;int c=fio.get();
		for(;!isdigit(c);c=fio.get())if(c=='-')y=true;
		for(;isdigit(c);c=fio.get())t=t*10+(c^48);
		if(y==1){t=-t;}return fio;
	}
	fastIO &operator>>(unsigned int &t){
		t=0;int c=fio.get();
		for(;!isdigit(c);c=fio.get());
		for(;isdigit(c);c=fio.get())t=t*10+(c^48);
		return fio;
	}
	fastIO &operator>>(signed long &t){
		t=0;bool y=0;int c=fio.get();
		for(;!isdigit(c);c=fio.get())if(c=='-')y=true;
		for(;isdigit(c);c=fio.get())t=t*10+(c^48);
		if(y==1){t=-t;}return fio;
	}
	fastIO &operator>>(unsigned long &t){
		t=0;int c=fio.get();
		for(;!isdigit(c);c=fio.get());
		for(;isdigit(c);c=fio.get())t=t*10+(c^48);
		return fio;
	}
	fastIO &operator>>(signed long long &t){
		t=0;bool y=0;int c=fio.get();
		for(;!isdigit(c);c=fio.get())if(c=='-')y=true;
		for(;isdigit(c);c=fio.get())t=t*10+(c^48);
		if(y==1){t=-t;}return fio;
	}
	fastIO &operator>>(unsigned long long &t){
		t=0;int c=fio.get();
		for(;!isdigit(c);c=fio.get());
		for(;isdigit(c);c=fio.get())t=t*10+(c^48);
		return fio;
	}
	fastIO &operator>>(__int128_t &t){
		t=0;bool y=0;int c=fio.get();
		for(;!isdigit(c);c=fio.get())if(c=='-')y=true;
		for(;isdigit(c);c=fio.get())t=t*10+(c^48);
		if(y==1){t=-t;}return fio;
	}
	fastIO &operator>>(__uint128_t &t){
		t=0;int c=fio.get();
		for(;!isdigit(c);c=fio.get());
		for(;isdigit(c);c=fio.get())t=t*10+(c^48);
		return fio;
	}
	fastIO &operator>>(char *t){
		int c=fio.get();
		for(;c!='\n';c=fio.get())*t=c,t++;
		return fio;
	}
	template<typename any>fastIO &operator>>(std::basic_string<any> &t){
		t.clear();any c=fio.get();
		for(;!isspace(c);c=fio.get())t.push_back(c);
		return fio;
	}
}fio;
2022/4/19 12:50
加载中...