vladislav
>то есть по сути я управляю собой
где-то прослезился дзен-буддист
Vladislav
Удобно
Vladislav
https://yandex.com/images/search?text=uroboros
Berkus
и как бы ты смог доказать сам себе необходимость перейти на с++17?
vladislav
vladislav
#шутеечка
std::mpa 🇺🇦
Справедливо
Anatoly
в принципе, когда я пришел в компанию большая система была на грани хаотического разброда
Anatoly
а сейчас VS 2015 и собираемся переходить на 2017
Berkus
c 15 на 17 переход в целом незаметный
Berkus
я с 10 на 15 переходил на удивление легко
Anatoly
да, тоже фактически не заметил, хотя поймал вольность 2010 с тем, что он делает copy ellision не смотря на отсутствие доступного копирующего конструктора
Ivan
Парни, приведите реальный пример когда вам нужен был указатель на член класса?
Ivan
Был ли он в вашей жизни? Когда гипотетически указатель на член класса может понадобиьтся?
Anatoly
когда надо завернуть вызов члена класса в контексте объекта в std::function
Ivan
С примерами
Ivan
Не, что-нибудь на ideone
Ivan
Для чего это может понадобиться, например
Anatoly
http://ideone.com/iMU1P6
Constantine
Constantine
Есть структура ItemProperty, у которой есть поля и флажки, какие поля определены однозначно. Нужно после запроса выписать данные
Constantine
Это делается через
auto read_value = [](auto ItemProperty::*member, int mask){
//....
}
read_value(&ItemProperty::Face, ItemProperty::FACE_FLAG);
read_value(&ItemProperty::Size, ItemProperty::SIZE_FLAG);
Anatoly
как только появляется нужда в косвенном вызове, тогда возникают указатели на функции, члены данных, члены функции
Constantine
Эта функция вне класса
Anatoly
а вызывается член класс А
Anatoly
в контексте объект A o
Ivan
В смысле она таким же синтаксисом вызовется и для другого класса
Anatoly
у тебя есть std::function<void (int)>
Ivan
Всё, всё. Я тебя понял
Anatoly
я могу сюда статическую функцию завернуть, а могу функцию член
Constantine
Для указателей на функции есть еще примеры с заворачиваниями
struct Some {
private:
//сигнатуры здесь одинаковы в силу магии
bool TryAddTable(...);
bool TryAddImage(...);
void AddObject(bool (Some::*adder)(...), ...); //безумно сложный метод, делает 4 вызова adder в худшем случае
public:
void AddTable(...);
void AddImage(...);
};
Ivan
Александр
Ivan
Я подтвердил твои слова
Ivan
Александр
Constantine
Кстати, еще есть "фича", что у std::unique_ptr нельзя вызвать метод по ->*
Vladislav
в c++17 std::invoke придумали
Vladislav
а так, (*p).*
F a d e r
Vladislav
unique_ptr<C> p;
std::invoke(p, C::f);
должен работать
Fo
У раста ошибки теперь по-круче чем крестов! #убийцасисиплюс
Fo
Vladislav
убивший дракона - сам становится драконом
Anonymous
Artur &
всем привет
Artur &
тут вопросы - типа обсуждение проекта - обсуждаются ? подскажите
Anatoly
задать вопрос точно можно
RattenKong 🦧🐀🦍️
Плохой гонец раньше головы лтшался, а сейчас - тела?
Berkus
гонец из Пизы
Dmitry
из Пензы
Constantine
Делайте шаблонным параметром
Constantine
Проверьте только на incomplete type, а то опять упадет на докторе
🦥Alex Fails
Constantine
Ruslan
ну на винде работает просто отлично. на линуксе не пробовал
Vladislav
а в CLRS тяжелая математика, считается?
🐙 Antony
Ivan
чушь
Вот тебя я и ждал. Расскажи
Berkus
чушь
не чушь. obj.func() вызывает функцию на объекте напрямую как Obj::func(obj);
Berkus
по референсу понятное дело виртуально тоже
Andrei
Это не то, что ты сказал.
Berkus
Berkus
это зато то что я имел в виду
Vladislav
так там первые 300 страниц - мат. введение. Дальше математики особо нет уже
Vladislav
ну есть еще глава про Amortized Analysis, но ее можно с чистой совестью пропустить, если не интересно
🦥Alex Fails
FailsBot
http://en.cppreference.com/w/cpp/utility/functional/invoke
Constantine
Vladislav
вещей, для которых еще нет готовых библиотек, всегда будет намного больше. Кроме того, без понимания алгоритмов все равно не получится эффективно использовать имеющиеся библиотеки
Vladislav
Berkus
Andrei
Я книги по алгоритмам воспринимаю исключительно как справочники.
Vladislav
опять же, все нормальные конторы на интервью в первую очередь проверяют понимание алгоритмики