我有一系列类告诉调试流(在本例中为 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/