刚学泛型编程0.1018s 伪娘求助
  • 板块灌水区
  • 楼主野生林登万
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/10/24 20:29
  • 上次更新2023/11/2 11:32:44
查看原帖
刚学泛型编程0.1018s 伪娘求助
369942
野生林登万楼主2023/10/24 20:29

如果想要写出一个同名的函数,针对整型(int,long long) 和 字符串(string),以及可能的其他类型,会有不同的表现,该怎么办呢?

当然可以直接针对不同参数重载,但是如果不想分别写 short,int,long,long long的重复代码,有无解决方案?

目前的写法是:

template<
		typename T,
		typename = typename enable_if< is_convertible<T,int>::value >::type 
	>
	FastIO& operator>>(T& integerVar){
		cerr<<"try read int"<<endl;
		ReadInt(integerVar);
		return *this;
	}
	template<
		typename T,
		typename = typename enable_if< is_convertible<T,string>::value >::type,
		typename = typename enable_if< is_convertible<T,string>::value >::type
	>
	FastIO& operator>>(T& stringVar){
		cerr<<"read str"<<endl;
		cin>>stringVar;
		return *this;
	}

实测可用,但是要写两个 enable_if 很蠢,因为只写一个编译器认为咱在用相同的模板和参数重载函数,于是报错,只能写两个 enable_if,如果后面要加种类岂不是要写三个四个?

2023/10/24 20:29
加载中...