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

using templates to apply class functions to a vector of objects

本文关键字:应用于 对象 向量 类函数      更新时间:2023-10-16

假设我有不同对象的向量,比如D的类型是vector< Dog >, R的类型是vector< Rock >。是否有可能使用模板,所以我可以自动有所有成员函数可调用的向量?例如,如果Dog有一个功能Bark(),我希望D.bark()导致所有的狗叫。

现在,显然我可以用一个新函数和一个简单的循环手工编写这种行为,但是有简单的模板制作方法吗?例如,让R.smash()在没有我的情况下砸碎所有的石头不要显式地对循环进行编码。我试着想象语法应该是什么,它让我大吃一惊。

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

在c++ 03中,您可以使用boost::bind代替。您可以尝试将它封装在一个单独的函数模板中,但我有一种感觉,它不会给您带来太多好处。在需要此行为的地方使用for_each是足够清楚的。

可以这样做:

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

我想有更简单的方法。