Содержание
- 2. Содержание Variadic templates Perfect Forwarding LSP
- 3. Variadic Templates Объявление переменного числа типов template Объявление набора параметров типов, заданных Args double f(Args... args)
- 4. Распаковка кортежа template void f(Us... pargs) {} template void g(Ts... args) { f(&args...); // “&args...” is
- 5. Распаковка кортежа (2) f(&args...); // expands to f(&E1, &E2, &E3) f(n, ++args...); // expands to f(n,
- 6. Распаковка кортежа (3) (const args&..) // -> (const T1& arg1, const T2& arg2, ...) ((f(args) +
- 7. Использование лямбда template void f(Args... args) { auto lm = [&, args...]{ return g(args...); }; lm();
- 8. Пример: Сумма template double sum(T t) { return t; } // Рекурсия: поэлементная развертка кортежа template
- 9. Пример №2 template T square(T t) { return t * t; } // Our base case
- 10. Принцип LSP class Rectangle { public: void SetWidth(int w) { w_ = w; } void SetHeight(int
- 11. LSP: Пример Геометрические фигуры: прямоугольник, квадрат Квадрат – более «специализированное» определение прямоугольника Методы Set/GetWidth, Set/GetHeight, GetArea()
- 12. LSP: Реализация Rectangle (1) class Rectangle { public: void SetWidth(int w) { w_ = w; }
- 13. LSP: Реализация Rectangle (2) class Rectangle { public: virtual void SetWidth(int w) { w_ = w;
- 14. LSP: Реализация Quad class Quad : public Rectangle { public: void SetWidth(int w) { w_ =
- 15. Нарушение LSP void g(Rectangle *p) { p->SetHeight(5); p->SetWidth(4); assert(p->GetArea() == 20); } Ошибки проектирования иерархии При
- 17. Скачать презентацию