> On Aug 26, 2016, at 10:03 AM, Eike Ziller <[email protected]> wrote:
>
>
>> On Aug 25, 2016, at 8:25 PM, Giuseppe D'Angelo <[email protected]> wrote:
>>
>> On Wed, Aug 24, 2016 at 1:57 PM, Eike Ziller <[email protected]> wrote:
>>> - "optional<IEditor*> EditorManager::currentEditor() const” makes it
>>> explicit that not having a current editor is a reasonable expectation, and
>>> that you have to check this condition before doing anything with the
>>> potential IEditor instance.
>>> - On the other hand, IEditor instances without an IDocument are not
>>> allowed, so if you are checking the return value of “IDocument
>>> *IEditor::document() const”, you should do that only as part of a
>>> QTC_ASSERT/QTC_GUARD style sanity check.
>>
>> Playing devil's advocate here: what's the point of using an optional
>> pointer? Pointers already have an optional value -- the null pointer
>> constant. That seems totally redundant. Ideally one would use
>> optional<IEditor&>, which doesn't compile for other reasons, but
>> would have the semantics you describe.
Actually one could say that optional<T&> _is_ T* ;)
So basically to make a difference in the API we’d need to change all pointers
that are not optional to references.
> Pointers do have an optional value, but actually often nullptr is not a valid
> value for a pointer semantically. So IMO it would add API clarity.
>
> In an imaginary world where optional would be used consistently, I’d know
> that if I want to implement an IEditor, that
> IDocument *MyEditor::document() const { return 0; }
> is not correct, simply because it is not optional<IDocument*> ;)
>
> And I would know that
> if (IDocument *doc = someEditor->document()) ....
> is senseless.
>
> Also we do not check every pointer that we get from a method for nullptr. And
> actually I do not see the sense in doing it (e.g. for IEditor::document() we
> definitely don’t).
> So even in the existing, non-ideal world I’d find out that
> project()->activeTarget()->activeBuildConfiguration()->buildDirectory()
> is just wrong, because both activeTarget and activeBuildConfiguration are
> optional, and the compiler doesn’t let me write it that way.
>
> And, at the time that activeBuildConfiguration was made optional (it wasn’t
> all the time), all the code doing
> target->activeBuildConfiguration()->buildDirectory()
> which was perfectly right so far, would actually lead to a compile error
> because it is wrong now.
>
> So I do see value of using optional even for pointers.
>
> --
> Eike Ziller
> Principal Software Engineer
>
> The Qt Company GmbH
> Rudower Chaussee 13
> D-12489 Berlin
> [email protected]
> http://qt.io
> Geschäftsführer: Mika Pälsi, Juha Varelius, Tuula Haataja
> Sitz der Gesellschaft: Berlin, Registergericht: Amtsgericht Charlottenburg,
> HRB 144331 B
>
>
>
>
> _______________________________________________
> Qt-creator mailing list
> [email protected]
> http://lists.qt-project.org/mailman/listinfo/qt-creator
--
Eike Ziller
Principal Software Engineer
The Qt Company GmbH
Rudower Chaussee 13
D-12489 Berlin
[email protected]
http://qt.io
Geschäftsführer: Mika Pälsi, Juha Varelius, Tuula Haataja
Sitz der Gesellschaft: Berlin, Registergericht: Amtsgericht Charlottenburg, HRB
144331 B
_______________________________________________
Qt-creator mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/qt-creator