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)