gpt4 book ai didi

c++ - 如何重载 printf 或 cout

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:05 24 4
gpt4 key购买 nike

我在我的程序中使用 cout 语句来进行调试。我想制作一个像它一样工作或像 printf 一样工作但对全局变量敏感的函数。如果这个全局变量为真,那么它将打印到屏幕上。如果它是假的,那么它不会打印任何东西。已经有这样的功能了吗?如果不是,那如何制作?

最佳答案

像这样:

int myPrintf(const char* format, ...) 
{
if (globalCheck == 0)
return 0
va_list vl;
va_start(vl, format);
auto ret = vprintf(format, vl);
va_end(vl);
return ret;
}

va_startva_end 获取 ... 中的参数并将它们封装在 va_list 中。有了这个 va_list,您就可以使用 vprintf,它是 printf 的一个变体,专为满足此需求而设计。

旁注——通常使用全局变量是不好的做法。更好的做法是将它封装在这样的类中 -

class ConditionalPrinter {
public:
ConditionalPrinter() : m_enable(true) {}
void setOut(bool enable) { m_enable = enable; }
int myPrintf(const char* format, ...);
private:
bool m_enable;
}

然后检查 m_enable 而不是全局变量。用法如下所示:

ConditionalPrinter p;
p.myPrintf("hello %d", 1); // printed
p.setOut(false);
p.myPrintf("hello2 %d", 1); // not printed

....

关于c++ - 如何重载 printf 或 cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876646/

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