Size: a a a

2020 July 21

t

tamtakoe in supapro.cxx
Побитый Кирпич
что такое items?
Какая-то коллекция. Например дэк
источник

ПК

Побитый Кирпич... in supapro.cxx
tamtakoe
Какая-то коллекция. Например дэк
Конкретный тип
источник

t

tamtakoe in supapro.cxx
Побитый Кирпич
Конкретный тип
Да, deque<map<string, int>>, например
источник

ПК

Побитый Кирпич... in supapro.cxx
tamtakoe
Да, deque<map<string, int>>, например
Тогда код  с  ссылкой должен работать
источник

ПК

Побитый Кирпич... in supapro.cxx
for (const auto& item : items) {

}
источник

ПК

Побитый Кирпич... in supapro.cxx
item тут имеет тип const map<string, int>&
источник

ПК

Побитый Кирпич... in supapro.cxx
То есть ссылка на мапу
источник

t

tamtakoe in supapro.cxx
Побитый Кирпич
for (const auto& item : items) {

}
C auto работает. C for (const Item& item : sortedItems) { не хочет
Reference to type 'const Item' (aka 'const map<basic_string<char, char_traits<char>, allocator<char> >, variant<basic_string<char, char_traits<char>, allocator<char> >, double> >') could not bind to an lvalue of type 'std::_Deque_iterator<std::_Deque_val<std::_Deque_simple_types<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double>, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double> > > > *> > >::value_type' (aka 'std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double>, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double> > > > *')
--------------------------
const map<basic_string<char>, variant<basic_string<char>, double>> &item
источник

ПК

Побитый Кирпич... in supapro.cxx
tamtakoe
C auto работает. C for (const Item& item : sortedItems) { не хочет
Reference to type 'const Item' (aka 'const map<basic_string<char, char_traits<char>, allocator<char> >, variant<basic_string<char, char_traits<char>, allocator<char> >, double> >') could not bind to an lvalue of type 'std::_Deque_iterator<std::_Deque_val<std::_Deque_simple_types<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double>, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double> > > > *> > >::value_type' (aka 'std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double>, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, double> > > > *')
--------------------------
const map<basic_string<char>, variant<basic_string<char>, double>> &item
Что такое Item?
источник

🎄T

🎄🎊 R 🎅 Tb| ✡️ 🎊🎄... in supapro.cxx
Побитый Кирпич
Что такое Item?
map<basic_string<char, char_traits<char>, allocator<char> >, variant<basic_string<char, char_traits<char>, allocator<char> >, double> >
источник

t

tamtakoe in supapro.cxx
Побитый Кирпич
Что такое Item?
using Item = map<string, variant<string, double>>;
источник

ПК

Побитый Кирпич... in supapro.cxx
Почему Item имеет отличный тип от decltype(items)::value_type?
источник

ПК

Побитый Кирпич... in supapro.cxx
Если у тебя дек это deque<map<string, int>>, то Item должен быть map<string, int>
источник

s

std::slavik in supapro.cxx
вопрос - есть абстрактный класс Stream:
class Stream : public FileLike, private NonCopyable<Stream> {
...
protected:
   virtual int _putc(int c) = 0;
   virtual int _getc() = 0;
   virtual void lock()
   {
   }
   virtual void unlock()
   {
   }
...
от этого класса наследуются классы в которых уже конкретная реализация Serial порта, например
class USBSerial: public USBCDC, public mbed::Stream
{...}

Как мне сделать так чтобы я определил перегрузку lock()/unlock() в одном месте и для всех классов наследников Stream ее использовал?
Думал что-то вроде такого, но ругается что я не определил в этом классе конструктор с нужной сигнатурой
template <typename T>
class MySerial : public T {
protected:
 void lock(void) override { mutex_.lock(); }
 void unlock(void) override { mutex_.unlock(); }
private:
 Mutex mutex_;
};

конструкторы могут быть разные - в зависимости от реализации, например:
Serial pc_serial(PC_6, PC_7, 250000);
USBSerial pc_serial(true, 0x1f00, 0x2012, 0x0001);

Как сделать так чтобы у наследованного класса появились конструкторы базового?
источник

ПК

Побитый Кирпич... in supapro.cxx
Иначе либо items это неверное имя, либо Item :)
источник

ПК

Побитый Кирпич... in supapro.cxx
std::slavik
вопрос - есть абстрактный класс Stream:
class Stream : public FileLike, private NonCopyable<Stream> {
...
protected:
   virtual int _putc(int c) = 0;
   virtual int _getc() = 0;
   virtual void lock()
   {
   }
   virtual void unlock()
   {
   }
...
от этого класса наследуются классы в которых уже конкретная реализация Serial порта, например
class USBSerial: public USBCDC, public mbed::Stream
{...}

Как мне сделать так чтобы я определил перегрузку lock()/unlock() в одном месте и для всех классов наследников Stream ее использовал?
Думал что-то вроде такого, но ругается что я не определил в этом классе конструктор с нужной сигнатурой
template <typename T>
class MySerial : public T {
protected:
 void lock(void) override { mutex_.lock(); }
 void unlock(void) override { mutex_.unlock(); }
private:
 Mutex mutex_;
};

конструкторы могут быть разные - в зависимости от реализации, например:
Serial pc_serial(PC_6, PC_7, 250000);
USBSerial pc_serial(true, 0x1f00, 0x2012, 0x0001);

Как сделать так чтобы у наследованного класса появились конструкторы базового?
фу имена с подчёркивания
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
tamtakoe
В общем, как я понимаю, любые типы данных (примитивы, stl структуры, собственные классы) при передаче копируются и только один массив - исключение?
std::mutex
источник

t

tamtakoe in supapro.cxx
Побитый Кирпич
Если у тебя дек это deque<map<string, int>>, то Item должен быть map<string, int>
Не-не, у меня using Items = deque<Item>. int  и проч. я для упрощения написал
источник

t

tamtakoe in supapro.cxx
tamtakoe
Не-не, у меня using Items = deque<Item>. int  и проч. я для упрощения написал
Понял в чем ошибка
deque<Item*> sortedItems
источник

t

tamtakoe in supapro.cxx
Там дэк указателей. Теперь точно перед переменными буду префикс p указывать)
источник