________________________________
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.