使用模板将类函数应用于对象矢量

时间:2011-12-20 21:01:40

标签: c++ object templating

假设我有不同对象的向量,例如D类型为vector< Dog >R类型为vector< Rock >。是否可以使用模板,因此我可以自动让所有成员函数在向量上调用?即如果Dog有一个函数Bark(),我希望D.bark()让所有的狗都吠叫。

现在,显然我可以用新函数和一个简单的循环手动编写这种行为,但是 有一个简单的模板方法吗?即所以R.smash()在没有我的情况下打碎了所有的岩石 永远明确编码该循环。我试图想象语法会是什么,这让我大吃一惊。

2 个答案:

答案 0 :(得分:4)

std::for_each(dogs.begin(), dogs.end(), std::bind(&Dog::bark, _1));

在C ++ 03中,您可以使用boost::bind代替。你可以尝试将它包装在一个单独的功能模板中,但我感觉它不会给你带来太大的收获。在需要此行为的地方使用for_each就足够清楚了。

答案 1 :(得分:2)

这样的事情会起作用:

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

我认为这是一种更简单的方法。