gpt4 book ai didi

c++ - 有没有一种好方法可以让函数在不使用 IOStream 库的情况下写入控制台、文件或内存缓冲区?

转载 作者:行者123 更新时间:2023-11-28 03:56:03 25 4
gpt4 key购买 nike

评论my answer here让我思考如何实现与 C++ 流相同的模式。具体来说,我需要能够拥有一个可以写入控制台、文件或字符串/内存缓冲区的函数。我不需要 IOStreams 提供的大部分格式化功能。是否有一些更好的设计可以允许这种在其他圈子中常用的惯用重定向?

例如 - 为了进行测试,我需要能够写入字符串,但对于实际程序使用,它总是会写入文件或控制台。

最佳答案

完全未经测试,但您明白了。

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 仍有很大的速度提升空间……我想这是一个很好的中间立场,但仍然只是一个折衷方案。

关于c++ - 有没有一种好方法可以让函数在不使用 IOStream 库的情况下写入控制台、文件或内存缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3593332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com