Собственно заголовок говорит сам за себя =) В очередной раз получил ТЛ из-за сина. Что в этом случае делает нормальный человек? Переходит наконец на сканф/принтф. Что делаю я? Пишу какую-то ересь, которая подменяет одно другим.
#ifdef WIN32
#define LLD "%I64d"
#else
#define LLD "%l" "ld"
#endif
#define cin mycin
#define cout mycout
#define endl '\n'
struct io {
io operator» (int& x) {scanf("%d",&x); return *this; }
io operator» (LL& x) {scanf(LLD,&x); return *this; }
io operator» (double& x) {scanf("%lf",&x); return *this; }
io operator» (char& x) {scanf("%c",&x); return *this; }
io operator» (char* x) {scanf("%s",x); return *this; }
io operator» (string& x) {scanf("%s",x.c_str()); return *this; }
io operator« (int x) {printf("%d",x); return *this; }
io operator« (LL x) {printf(LLD,x); return *this; }
io operator« (double x) {printf("%.8lf",x); return *this; }
io operator« (char x) {printf("%c",x); return *this; }
io operator« (char* x) {printf("%s",x); return *this; }
io operator« (string x) {printf("%s",x.c_str()); return *this; }
};
io cin, cout;
Вряд ли этот адовый ад стоит использовать в жизни. Но чисто теоретически интересно: будет ли это работать достаточно быстро? Или такая структура существенно утяжеляет "голые" сканф/принтф? И, возможно, стоит как-то пошаманить с typeof и сделать несколько кейсов внутри одной перегрузки, чем писать 100500 их? В общем, интересно, насколько оптимальным это может быть.