21

Re: Поєднання C та C++

Тим, що ось так не пройде:

struct dummy_t {
    void invoke() {
        invoke_callback([=] {
            std::cout << "Hello, world!" << x << std::endl;
        });
    }
    int x;
};

Питання саме в доступі до даних об'єкта.

Подякували: leofun011

22

Re: Поєднання C та C++

Вибачте панове за зухвалість, але тема від назви до по сіх пір суцільна маячня.
Яке має відношення поєднання C та C++ до Callback?

23 Востаннє редагувалося wander (18.05.2021 01:55:48)

Re: Поєднання C та C++

koala написав:

Тим, що ось так не пройде:

struct dummy_t {
    void invoke() {
        invoke_callback([=] {
            std::cout << "Hello, world!" << x << std::endl;
        });
    }
    int x;
};

Питання саме в доступі до даних об'єкта.

Прихований текст
extern "C" void invoke_callback(void (*callback)(void)) {
    callback();
}

template <typename Fn> auto to_function_pointer(Fn f) {
    static auto lambda = f;
    return [](auto... args) { return lambda(args...); };
}

struct dummy_t {
    void invoke() {
        invoke_callback(to_function_pointer([&] { std::cout << x << std::endl; }));
    }

    int x = 2021;
};

int main() {
    dummy_t d;
    d.invoke();
}

P.S. - я б таки спочатку глянув на ту бібліотеку і на ті дані об'єкта, перш ніж займатися збоченнями.

?

Подякували: leofun011

24

Re: Поєднання C та C++

Дякую, wander, хоч у когось на цьому форумі ще голова працює.

25

Re: Поєднання C та C++

Гм... а якщо буде кілька викликів у циклі? Шаблон інстанціюється один раз, статична змінна одна, але ж лямбди різні. Щось не працює.

Подякували: wander, leofun012

26

Re: Поєднання C та C++

Хоча, зрештою, гадаю, краще не буде.
Лише питання - як краще, зі статичною змінною у шаблоні чи з глобальним/статичним екземпляром класу?

27 Востаннє редагувалося wander (18.05.2021 10:08:48)

Re: Поєднання C та C++

Думаю таки статична змінна у шаблоні краще, хоча кому як. Але я б дочекався ТС, нащо гадати?

28

Re: Поєднання C та C++

Підтримую. Тут потрібна додаткова інформація від ТС. Хоча б сигнатура функції з колбеком.

29

Re: Поєднання C та C++

Чутки про dll перебільшені. Спочатку я робив через глобальну змінну, потім коли знадобився многопотік переписував прототип ф-ції коллбеку. Але це все не дуже зручно, особливо коли періодично доводиться оновлювати лібу. Тому й спитав про потенційні більш елегантні підходи.
https://github.com/open62541/open62541/ … t_events.c

30 Востаннє редагувалося koala (18.05.2021 16:14:06)

Re: Поєднання C та C++

cheappi386 написав:

Чутки про dll перебільшені

Хто тут про dll казав?
Посилання - це на вашу лібу? Тоді чому на приклади, а не на документацію? Чи це ви наводите приклад більш елегантного підходу? Бо там чудово передача даних в колбеки робиться, щоправда, не в цих прикладах.

Подякували: wander, leofun012

31

Re: Поєднання C та C++

koala написав:

Бо там чудово передача даних в колбеки робиться, щоправда, не в цих прикладах.

Там ? Про що мова йде ? Мені цікаво було про доступ з коллбеку до членів певного екземпляру класу, у якийсь новий для мене спосіб.

32

Re: Поєднання C та C++

А ви спробуйте у старий. Там якраз void *userdata присутня.