[英]Knowing which ostream is passed to a function c++ [duplicate]
我有一个我正在编写的函数,如果它通过文件流与通过控制台输出,它应该以不同的方式处理输出。 我可以编写两个函数,一个用于处理 cout,一个用于处理 fstream,并将它们放入 if 语句中以确定调用哪个,或者可以在要运行的版本上添加一个 bool,但验证在我看来,输出传递给函数。 我的第一次尝试是
void print(unsigned long long exp, unsigned long long* total,
ostream& out, unsigned long long min, unsigned long long max, unsigned
long long length)
{
if (out == cout)
...
}
有没有办法重载 == 来比较这些或比较这些的函数?
根据您的评论,这是一个 XY 问题——您确实有一个完全不同的问题(当输出到控制台而不是文件时具有特殊的输出格式),并认为最好通过识别 ostream 来完成。
更好的方法是分配一个自定义格式标志供您使用,然后在 cout 中设置该标志。 然后您的打印例程检查标志:
class CustomFlag {
static int flag_id = -1;
public:
static std::ios_base &set(std::ios_base &s) {
if (flag_id < 0) flag_id = s.xalloc();
s.iword(flag_id) = 1;
return s; }
static std::ios_base &clear(std::ios_base &s) {
if (flag_id < 0) flag_id = s.xalloc();
s.iword(flag_id) = 0;
return s; }
static int get(std::ios_base &s) {
if (flag_id < 0) flag_id = s.xalloc();
return s.iword(flag_id); }
};
你做std::cout << CustomFlag::set;
将其设置在标准输出上,并使用CustomFlag::get(stream)
检查任何 ostream 上的标志。
通过这样做,您可以控制任何 ostream 上的格式——包括将“控制台”格式设置为文件(用于测试)。 如果您调用copyfmt
它也会在流之间正确复制
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.