Size: a a a

2020 October 02

CD

Constantine Drozdov in pro.cxx
так можно было всегда делать
источник

O

Oleksandr in pro.cxx
Anatoly Tomilov
std::queue<std::variant<F1, F2, F3>>
Тогда эта очередь сможет хранить только три типа колбеков. Зачем они тогда вообще нужны? Может заменить на enum class Action { F1, F2, F3 }?
источник

AT

Anatoly Tomilov in pro.cxx
Oleksandr
Тогда эта очередь сможет хранить только три типа колбеков. Зачем они тогда вообще нужны? Может заменить на enum class Action { F1, F2, F3 }?
повторяю. В собственном коде есть конечное число типов и все они видимые. На границах с чужим кодом void * понадобится. Я не спорю с этим.
источник

m

magras in pro.cxx
Anatoly Tomilov
повторяю. В собственном коде есть конечное число типов и все они видимые. На границах с чужим кодом void * понадобится. Я не спорю с этим.
Как должна выглядеть простейшая реализация однопоточного экзекютера через вариант?

class executor {
 std::queue<std::function<void()> m_queue;
public:
 void spawn(std::funtion<void()> f) {
   m_queue.push(f);
 }
 void run() {
   while (!m_queue.empty()) {
     m_queue.front()();
     m_queue.pop();
   }
 }
};
источник

CD

Constantine Drozdov in pro.cxx
magras
Как должна выглядеть простейшая реализация однопоточного экзекютера через вариант?

class executor {
 std::queue<std::function<void()> m_queue;
public:
 void spawn(std::funtion<void()> f) {
   m_queue.push(f);
 }
 void run() {
   while (!m_queue.empty()) {
     m_queue.front()();
     m_queue.pop();
   }
 }
};
для начала замените std::function<void()> на шаблонный параметр :)
источник

m

magras in pro.cxx
Constantine Drozdov
для начала замените std::function<void()> на шаблонный параметр :)
Я сказал простейшего. =)
источник

CD

Constantine Drozdov in pro.cxx
magras
Я сказал простейшего. =)
не вижу усложнений от автозамены и парочки корректур)
источник

m

magras in pro.cxx
Ну в смысле не стесняйтесь менять и внешний интерфейс при сохранении функциональности.
источник

O

Oleksandr in pro.cxx
Anatoly Tomilov
повторяю. В собственном коде есть конечное число типов и все они видимые. На границах с чужим кодом void * понадобится. Я не спорю с этим.
Дело не в границах кода, дело в том, что ваша очередь поддерживает всего три типа функторов
источник

O

Oleksandr in pro.cxx
Стирание типов позволяет засовывать в нее и четвертый, и пятый, и вообще какой только хочешь
источник

CD

Constantine Drozdov in pro.cxx
Oleksandr
Дело не в границах кода, дело в том, что ваша очередь поддерживает всего три типа функторов
Ну добавьте четвертый в список
источник

AT

Anatoly Tomilov in pro.cxx
Проблема может быть только в рекурсии. Больше не вижу проблем. В т.ч. и с очередями из примеров
источник

O

Oleksandr in pro.cxx
Constantine Drozdov
Ну добавьте четвертый в список
Эм, ну, ээ, ну в принципе можно.
источник

D

Dmitriy in pro.cxx
Constantine Drozdov
для начала замените std::function<void()> на шаблонный параметр :)
В общем случае от variant либо type erasure не избавиться...
источник

AT

Anatoly Tomilov in pro.cxx
Anatoly Tomilov
Проблема может быть только в рекурсии. Больше не вижу проблем. В т.ч. и с очередями из примеров
То есть когда что-то должно быть определено как раньше так и позже чего-то второго
источник

O

Oleksandr in pro.cxx
Если весь код свой - можно на каждый новый колбек добавлять очередной параметр в вариант
источник

CD

Constantine Drozdov in pro.cxx
Dmitriy
В общем случае от variant либо type erasure не избавиться...
Ну Анатолий верно замечает, что для закрытой программы variant и TypeErasure в позиции шаблонного параметра просто одинаковые
источник

m

magras in pro.cxx
Constantine Drozdov
Ну Анатолий верно замечает, что для закрытой программы variant и TypeErasure в позиции шаблонного параметра просто одинаковые
Это замечательно с теоретической точки зрения. Но на практике как мою задачу решать?
источник

D

Dmitriy in pro.cxx
А если коллбэки могут иметь кучу собственных шаблонных аргументов?
источник

CD

Constantine Drozdov in pro.cxx
magras
Это замечательно с теоретической точки зрения. Но на практике как мою задачу решать?
Задачи пока не вижу. Есть какое-то решение задачи, представленное каким-то кодом
источник