我们有几个类,其中对成员函数的调用可能会更改状态,有时不更改默认值的布尔值。
A a;
a.set( "foobar" );
assert( a.changed() == true );
与
A a;
a.set( "foobar", false );
assert( a.changed() == false );
请注意,这些成员函数是虚拟的。我更喜欢使用别名来更好地阅读代码,并使私有成员函数仍然允许使用旧方法,并且仅将包装提供给公众:
a.silentlySet( "foobar" ) {
a.set( "foobar", false );
}
我想这无论如何都会被内联。我知道我可以编写枚举和常量来提高可读性:
a.set( "foobar", SILENTLY );
但我对此感觉不佳,因为问题是布尔型的(不管是否这样做)。另一方面。但是,我想听听您如何处理这种情况。 (我想我会得到一个“视情况而定”的答案,因为我当然错过了一些关键的细节)忍受吗?这些成员函数不是很经常被调用和使用,但也很少被使用。我担心的是,有时当您将布尔值具有其他含义时,可能会将布尔值误解为silent / not_silent-flag。
一个可能也会引起误解的示例:
if( b->getData( false ) && something_other )
这可能与
b->getData() == false
混淆了 最佳答案
但我对[在此处使用枚举]感到不满意,因为问题是布尔型的(执行或不执行)
不,一个枚举对此很完美,请使用它。 FWIW,CodeReview中有another discussion about this case。
也就是说,是的,包装函数很可能会内联。 C ++旨在提供无运行时成本的抽象。内联函数调用是这方面的基本工具,因此编译器会在适用的情况下使用它。