知道哪个流被传递给函数 c++
Knowing which ostream is passed to a function c++
我正在编写一个函数,如果它被传递到文件流,如果它被传递到控制台,它应该以不同的方式处理输出。 我可以编写两个函数,一个用于处理 cout,一个用于处理 fstream,并将它们放入 if 语句中以确定调用哪个,或者可以在要运行的版本上添加一个布尔值,但在我看来,验证传递给函数的输出会更简单。我的第一次尝试是
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
,它也将在流之间正确复制
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗