У меня несложный вопрос, ответ на который, вероятно, даст мне понять, как все-таки все (или почти все) устроено.
У меня есть вектор с wstring.
std::vector<std::wstring> v;
Заполненный всякой всяченой. Как красивее всего будет запустить для каждого элемента вектора функцию, принимающую в качестве параметра не wstring, а LPWCSTR.
void foo(LPCWSTR a);
Конечно, ничего не стоит сделать нечто вроде:
void yahoo(std::wstring a)
{
LPCWSTR l = a.c_str();
...
}
std::for_each(v.begin(), v.end(), yahoo);
Но создавать функции — ограничение.
Хочется что-то вроде static_cast<vector<LPCWSTR>>(v) (это, конечно, ересь).
Как это правильно и красиво сделать?
Re: запустить чужую функцию для каждого элемента вектора
это первое, что пришло мне в голову.
однако не хочется пользоваться циклом, хочется понять, существуют ли вообще такое явление в природе, которое позволило бы не только запустить некоторый метод у каждого элемента контейнера (mem_fun_ref(wstring::c_str) как унарный предикат), но и получить возвращаемое значение, которое и запихнуть в предикат, вместо элемента.
Re[4]: запустить чужую функцию для каждого элемента вектора
Здравствуйте, Пандочка, Вы писали:
П>однако не хочется пользоваться циклом, хочется понять, существуют ли вообще такое явление в природе, которое позволило бы не только запустить некоторый метод у каждого элемента контейнера (mem_fun_ref(wstring::c_str) как унарный предикат), но и получить возвращаемое значение, которое и запихнуть в предикат, вместо элемента.
Есть, Boost.Bind.
Но циклы рулят.
До последнего не верил в пирамиду Лебедева.
Re[4]: запустить чужую функцию для каждого элемента вектора
Здравствуйте, Пандочка, Вы писали:
П>это первое, что пришло мне в голову. П>однако не хочется пользоваться циклом, хочется понять, существуют ли вообще такое явление в природе, которое позволило бы не только запустить некоторый метод у каждого элемента контейнера (mem_fun_ref(wstring::c_str) как унарный предикат), но и получить возвращаемое значение, которое и запихнуть в предикат, вместо элемента.
в стандарте — нет.
есть в реализации STL от SGI, здесь.
так же описано у Джосьютиса, здесь.
про буст уже многие сказали.
Re[5]: запустить чужую функцию для каждого элемента вектора
Здравствуйте, Roman Odaisky, Вы писали:
RO>Есть, Boost.Bind. RO> Но циклы рулят.
Кстати, далеко не всегда. Часто читать код, в котором одно действие("операция над вектором") выполняется одним выражением, бывыет значительно проще, особенно, если программист не забывает писать комментарии.
--
Sergey Chadov
... << RSDN@Home 1.2.0 alpha rev. 685>>
Re[6]: запустить чужую функцию для каждого элемента вектора
Здравствуйте, Sergey Chadov, Вы писали:
SC>Здравствуйте, Roman Odaisky, Вы писали:
RO>>Есть, Boost.Bind. RO>> Но циклы рулят.
SC>Кстати, далеко не всегда. Часто читать код, в котором одно действие("операция над вектором") выполняется одним выражением, бывыет значительно проще, особенно, если программист не забывает писать комментарии.
вот я и пытаюсь понять, что удобночитаемее и удобнее.
просто цикл или вызов алгритма с адаптером.
со сложными и повторяющимися констукрциями все понятно — выношу в функтор, а с такими простыми, думаю, лучше все-таки через Bind, если есть возможность исользовать boost
Re[2]: запустить чужую функцию для каждого элемента вектора