использование шаблонов для применения функций класса к вектору объектов - PullRequest
0 голосов
/ 21 декабря 2011

Допустим, у меня есть векторы различных объектов, скажем, D имеет тип vector< Dog >, а R имеет тип vector< Rock >.Можно ли использовать шаблоны, чтобы я мог автоматически вызывать все функции-члены на векторах?Т.е. если Dog имеет функцию Bark(), я хочу, чтобы D.bark() заставлял всех собак лаять.

Теперь ясно, что я мог бы вручную написать это поведение с помощью новой функции и простого цикла, но есть ли простой способ его шаблонизировать?Т.е. так, что R.smash() разбивает все камни без того, чтобы я когда-либо явно кодировал этот цикл.Я пытаюсь представить, какой будет синтаксис, и он просто поражает.

Ответы [ 2 ]

4 голосов
/ 21 декабря 2011
std::for_each(dogs.begin(), dogs.end(), std::bind(&Dog::bark, _1));

В C ++ 03 вы можете использовать boost::bind. Вы можете попытаться обернуть его в отдельный шаблон функции, но я чувствую, что это не будет вам дорого покупать. Использование for_each там, где вам нужно, это поведение достаточно ясно.

2 голосов
/ 21 декабря 2011

Примерно так будет работать:

std::for_each(dog_vec.begin(),dog_vec.end(),std::mem_fun_ref(&dog::bark));

Я думаю, что есть более простой способ.

...