Size: a a a

2020 July 15

Е

Егор in supapro.cxx
Liber Azerate
Вот у меня есть конструктор, принимающий r-строку. Есть член-строка у класса.
ctor(std::string&& s) noexcept : str{ std::move(s) } {}
Мув семантика же не передаётся, нет? Разве я должен убрать std::move()? Ибо мне так сказали, что есть конструктор, принимающий r-ссылку:
basic_string( basic_string&& other ) noexcept
*вопрос с перегрузками*
источник

LA

Liber Azerate in supapro.cxx
Егор
*вопрос с перегрузками*
Да-да, но можно точно ответить? Там нужен std::move()?
источник

Е

Егор in supapro.cxx
Liber Azerate
Да-да, но можно точно ответить? Там нужен std::move()?
да
источник

LA

Liber Azerate in supapro.cxx
Ибо мне синьор так сказал, что-то сомневаешься сразу
источник

AV

Alexander Volkov in supapro.cxx
Короч такая задача, коротко - нужно организовать асинхронную подписку на события через хаб
Подробнее - есть объекты-потребители, есть объекты провайдеры и есть хаб провайдеров. Потребители работают в своих потоках и когда подписываются на события, предоставляют хабу коллбек. Хаб в свою очередь смотрит, от какого провайдера может прийти такое событие и подписывается на него туда, где нашел. События трех типов могут быть - bool, int, double. У bool свои айдишники, у int и double - общие. Потокобезопасность на переходе потребители-хаб я разрулил, а вот как правильнее сделать на связке провайдеры-хаб, закопался
Сейчас примерно вот так
class IProvider {
...
virtual bool setCallbackOnBool(std::function<void(BoolID, bool)>) = 0;
virtual bool setCallbackOnInt(std::function<void(NumericID, int)>) = 0;
virtual bool setCallbackOnDouble(std::function<void(NumericID, double)>) = 0;

virtual bool subscribeOnBool(BoolID) = 0;
virtual bool subscribeOnNumeric(NumericID) = 0;
};

class IProviderHub {
virtual void subscribeOnBool(std::weak_ptr<IConsumer> condition, BoolID) = 0;
virtual void subscribeNumeric(std::weak_ptr<IConsumer> condition, NumericID) = 0;
};

Провайдеры могут сгенерить события в любой момент, даже параллельно, но каждый провайдер сам по себе выдает их синхронно
Как было бы лучше организовать такую асинхронную подписку?
источник

AZ

Alexander Zaitsev in supapro.cxx
Liber Azerate
Вот у меня есть конструктор, принимающий r-строку. Есть член-строка у класса.
ctor(std::string&& s) noexcept : str{ std::move(s) } {}
Мув семантика же не передаётся, нет? Разве я должен убрать std::move()? Ибо мне так сказали, что есть конструктор, принимающий r-ссылку:
basic_string( basic_string&& other ) noexcept
нет, ты его убирать не должен
источник

LA

Liber Azerate in supapro.cxx
Alexander Zaitsev
нет, ты его убирать не должен
Да, хорошо, так и думал. Спасибо
источник

g

greg0r0 in supapro.cxx
А можете покидать гайды по современным плюсам 🧐

А то чёт осознал, что пишу на си с классами
источник

LA

Liber Azerate in supapro.cxx
greg0r0
А можете покидать гайды по современным плюсам 🧐

А то чёт осознал, что пишу на си с классами
Майерс, Современный С++
источник

g

greg0r0 in supapro.cxx
Liber Azerate
Майерс, Современный С++
Сяп
источник

Р

Роман in supapro.cxx
Да, хорошая книга
источник

AV

Alexander Volkov in supapro.cxx
Собственно и потребители в разных потоках, и провайдеры тоже должны быть в разных потоках
источник

Е

Егор in supapro.cxx
Alexander Volkov
Короч такая задача, коротко - нужно организовать асинхронную подписку на события через хаб
Подробнее - есть объекты-потребители, есть объекты провайдеры и есть хаб провайдеров. Потребители работают в своих потоках и когда подписываются на события, предоставляют хабу коллбек. Хаб в свою очередь смотрит, от какого провайдера может прийти такое событие и подписывается на него туда, где нашел. События трех типов могут быть - bool, int, double. У bool свои айдишники, у int и double - общие. Потокобезопасность на переходе потребители-хаб я разрулил, а вот как правильнее сделать на связке провайдеры-хаб, закопался
Сейчас примерно вот так
class IProvider {
...
virtual bool setCallbackOnBool(std::function<void(BoolID, bool)>) = 0;
virtual bool setCallbackOnInt(std::function<void(NumericID, int)>) = 0;
virtual bool setCallbackOnDouble(std::function<void(NumericID, double)>) = 0;

virtual bool subscribeOnBool(BoolID) = 0;
virtual bool subscribeOnNumeric(NumericID) = 0;
};

class IProviderHub {
virtual void subscribeOnBool(std::weak_ptr<IConsumer> condition, BoolID) = 0;
virtual void subscribeNumeric(std::weak_ptr<IConsumer> condition, NumericID) = 0;
};

Провайдеры могут сгенерить события в любой момент, даже параллельно, но каждый провайдер сам по себе выдает их синхронно
Как было бы лучше организовать такую асинхронную подписку?
По моему вопрос не по С++ а по архитектуре, может в @pro_prog лучше?
источник

ML

Mikhail Litvinov in supapro.cxx
Constantine Drozdov
игнорировать ошибки или синтезировать? дефолтный debug вроде отсутствие возвращаемого вообще treat as error
Спасибо! нашел нужное обсуждение
источник

LA

Liber Azerate in supapro.cxx
А если у меня возвращаемый тип std::string, а пишу return "", то RVO работает?
источник

Е

Егор in supapro.cxx
Liber Azerate
А если у меня возвращаемый тип std::string, а пишу return "", то RVO работает?
должно по идее
источник

LA

Liber Azerate in supapro.cxx
Егор
должно по идее
Спасибо
источник

AS

Anton Semenov in supapro.cxx
greg0r0
А можете покидать гайды по современным плюсам 🧐

А то чёт осознал, что пишу на си с классами
источник

VS

Vlad Serebrennikov in supapro.cxx
от них даже больше толку будет, чем от мейерса
источник

TS

Till Schneider in supapro.cxx
greg0r0
А можете покидать гайды по современным плюсам 🧐

А то чёт осознал, что пишу на си с классами
источник