完全没有经过测试,但你明白了。
struct stdio_stream {
enum { invalid_t, file_t, str_t } which;
union {
FILE *file_p;
string *str_p;
};
int printf( char *fmt, ... );
int scanf( char *fmt, ... );
stdio_stream() : which( invalid_t ), file_p( NULL ) {};
// etc
};
int stdio_stream::printf( char *fmt, ... ) {
int ret;
va_list args;
va_start( args, fmt );
if ( which == file_t ) {
ret = vfprintf( file_p, fmt, args );
} else if ( which == str_t ) {
string_p->resize( vsnprintf( NULL, 0, fmt, args )+1, '\0' );
ret = vsnprintf( &* string_p->begin(), string_p->size(), fmt, args );
} else throw runtime_error( "uninitialized stream" );
va_end( args );
return ret;
}
就个人而言,我认为iostream非常棒。如果需要加快速度,我将编写一个快速的解析器。
printf
我想这是一个不错的中间地带,但仍然只是一个妥协。