Date: prev next · Thread: first prev next last
2019 Archives by date, by thread · List index




________________________________
De : Michael Stahl <mst@libreoffice.org>
Envoyé : lundi 8 juillet 2019 13:15
À : Tomaž Vajngerl; Adrien Ollier
Cc : libreoffice@lists.freedesktop.org
Objet : Re: tdf#74702 2/2

On 08.07.19 13:06, Tomaž Vajngerl wrote:
Hi,

    On 06.07.19 19:59, Adrien Ollier wrote:
    ....


Well IMHO the problem that you even have to think about this is that
OutputDevice is a enormous class, and then you have to deal with another
even more enormous subclass vcl::Window, which should never be a
subclass of OutputDevice in the first place. However the work to change
that is quite big and non-trivial.

i rarely work with VCL's implementation so i can't really have an
informed opinion but if you say that delegation instead of inheritance
would be an improvement here i'm all for it.


Hello Michael,

thank you for your answer.
Can you explain what delegation means for you? I don't understand what you mean.

Also, I quite disagree with you.
First, C++ allows an overriding function to have a return type that is a subclass of the return 
type of the overridden function. You can ensure this by running the following example program:

#include <iostream>

struct A
{
    A() = default;
    A(const A&) = default;
    A(A&&) = default;
    virtual ~A() = default;
};

struct B : A {};

struct C
{
    virtual A* getNewInstance() const { return new A{}; }
};

struct D : C
{
    B* getNewInstance() const override { return new B{}; }
};

int main(int argc, char* argv[])
{
    D d;
    A* a = d.getNewInstance();
    delete a;

    return 0;
}

Also, let's take a concrete example:
<https://opengrok.libreoffice.org/xref/core/canvas/source/vcl/canvashelper.cxx?r=c88f7603>https://opengrok.libreoffice.org/xref/core/vcl/source/control/edit.cxx?r=d00ee2cb
void Edit::Draw(OutputDevice* pDev, const Point& rPos, const Size& rSize, DrawFlags nFlags)
see l.1771

Can you tell me how you would remove the use of GetOutDevType?


Regards,
Adrien Ollier

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.