gpt4 book ai didi

c++ - 抑制基类构造函数的输出

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

我有一系列类告诉调试流(在本例中为 std::cout)它已创建,让我可以很好地跟踪程序执行。我有几个类是非抽象基类的子类,这会在创建子类实例时产生双重消息。当从子类调用时,我想抑制基类构造函数中的输出。我知道如果没有一些花哨的技巧,这可能是不可能的,如果它有可能的话。

我确实考虑过使用退格转义序列\b,并且只做足够的事情来删除之前的消息,效率不高,但它是调试信息,那么性能并不是那么关键。 ..).我不确定这种方法的可移植性或有效性。

欢迎任何想法,感谢您的努力!

最佳答案

没有办法抑制基本构造函数中的代码,除非基本构造函数中的代码自己检查某些条件。您可以通过例如将特殊标志传递给基本构造函数(具有默认值,不禁止调试输出)。

class Base
{
public:
Base(bool suppressDebugInfo = false)
{
if (!suppressDebugInfo)
cout << "hallo from base" << endl;
}
};

class Derived : public Base
{
public:
Derived(bool suppressDebugInfo = false) : Base(true)
{
if (!suppressDebugInfo)
cout << "hallo from derived" << endl;
}
};

如果您的输出被重定向到文件等,则输出 \b 将无济于事。

一个不错的解决方案是创建一个返回字符串的虚函数,并输出该函数的结果。但是,这不适用于您的情况(从构造函数调用),因为在基本构造函数运行期间,虚函数的行为就好像实例是基本类型,而不是派生的。

关于c++ - 抑制基类构造函数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4328924/

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