namespace { template<class T> class Multiply { public: Multiply(T& result) : TotalResult(result) { } void operator()(const T& v) { TotalResult *= v; } private: T& TotalResult; }; } void main(void) { int result = 1; Multiply<int> functor(result); int buffer[] = {1, 2, 3, 4}; std::for_each(buffer, buffer + 4, functor); std::cout << "Result = " << result; }Поскольку for_each принимает последний параметр по значению, то функтору нужно передавать ссылку извне. Также, чтобы где-то сохранять ссылку на результат нам пришлось написать класс. Однако можно решить задачу и по-другому, используя std::bind1st.
воскресенье, 25 марта 2012 г.
Простая задачка о произведении всех элементов в массиве
Не так давно столкнулся с простой задачей: посчитать произведение элементов в массиве. Первое решение, приходящее в голову:
понедельник, 19 марта 2012 г.
Мелочи жизни
В рабочем коде периодически натыкаюсь на код подобного вида:
class SomeClass { //.... }; typedef std::auto_ptr<SomeClass> SomeClassAutoPtr; typedef std::tr1::shared_ptr<SomeClass> SomeClassSharedPtr; //.... SomeClassAutoPtr ptr = getSomePointer();Читать подобные километровые названия не очень приятно. Решение получше:
class SomeClass { //.... typedef std::auto_ptr<SomeClass> AutoPtr; typedef std::tr1::shared_ptr<SomeClass> Ptr; }; //... SomeClass::AutoPtr ptr = getSomePointer();ИМХО второй вариант выглядит куда приятнее первого, к тому же не засоряет "глобальное пространство имен".
Подписаться на:
Сообщения (Atom)