On 3 May 2023, at 19:32, A. Pönitz <apoen...@t-online.de> wrote:

On Wed, May 03, 2023 at 03:21:40PM +0200, Giuseppe D'Angelo via Development 
wrote:
Il 02/05/23 12:34, Volker Hilsheimer via Development ha scritto:

What started as an attempt to provide a few building blocks for making it 
easier to build asynchronous APIs taking any kind of callable (like 
QTimer::singleShot or QHostInfo::lookupHost) [1] has turned into a bit of a 
longer journey to the core.

[1]https://codereview.qt-project.org/c/qt/qtbase/+/470341
[2]https://codereview.qt-project.org/c/qt/qtbase/+/475168

A general problem here is whether we can provide this infrastructure as a
public API. If I have a class of mine and want to provide convenience for
connecting to slots/callables, how do I do it without using private APIs? In
Qt 4 days that was a simple:

 void foo(..., QObject *receiver, const char *slot);

But it's not so simple/possible any more with the PMF syntax.

Something like

   void foo(...,
        QObject *guard,
    const std::function<void(const Result &)> &continuation)

does a sufficiently good job over here.


That helps with specific cases, but for the general-purpose library APIs that 
have the flexibility we are used to in and from Qt, you need to cover when

- continuation is a member function of guard (and then guard has to be the 
right type, which should be enforced at compile time)
- guard lives in a different thread
- guard is destroyed by the time you call continuation

And you have to make things work with move-only functors and mutable lambdas.

Getting all of that right was never particularly easy with a string-based 
syntax either though.

Volker



-- 
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to