如果想要写出一个同名的函数,针对整型(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,如果后面要加种类岂不是要写三个四个?