On 1/12/17 2:30 AM, gsquel...@mozilla.com wrote:
This way all users of SomeClass only need to include SomeClass.h, not
SomeType.h, when they want to call SomeClass::foo.
They don't need to have SomeType.h included merely to call
SomeClass::foo. They have the forward-declaration in scope, so they can
pass along SomeType* values they get from somewhere, and don't even have
to forward-declare it themselves to do so. e.g. this would be a
perfectly sane consumer of SomeClass:
#include "SomeClass.h"
#include "SomeOtherClass.h" // also forward-declares SomeType
void PassLongFoo(SomeClass* inst)
{
inst->foo(SomeOtherClass::getSomeType());
}
where SomeOtherClass has a static getSomeType() returning SomeType*.
None of this requires any of the files involved to include SomeType.h.
What _does_ require including SomeType.h is if you plan to construct a
SomeType, or manipulate SomeType instances in some way. But in that
case, you really should be including SomeType.h yourself instead of
relying on SomeClass to do it for you, in my opinion.
I can see how nice this can be for users of SomeClass.
Until SomeClass stops using SomeType and those users stop compiling
because they are still doing things with it but no longer getting the
include courtesy of SomeClass. This is especially pernicious with
unified compilation, because it can take some time to notice.
So I personally still prefer the coding style as is
I do too.
-Boris
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform