假设我有不同对象的向量,假设D
的类型是vector< Dog >
,R
的类型是vector< Rock >
。有没有可能使用模板,这样我就可以在向量上自动调用所有成员函数?也就是说,如果Dog
有一个Bark()
函数,我想让D.bark()
让所有的狗都叫。
现在,很明显我可以用一个新函数和一个简单的循环手动编写这个行为,但是有没有一种简单的方法来模板化它?也就是说,这样R.smash()
就可以打破所有的障碍,而我从来没有显式地编写过这个循环。我试着想象它的语法会是什么,这让我大吃一惊。
发布于 2011-12-20 21:08:13
std::for_each(dogs.begin(), dogs.end(), std::bind(&Dog::bark, _1));
在C++03中,您可以改用boost::bind
。您可以尝试将其封装在一个单独的函数模板中,但我有一种感觉,它不会给您带来太多好处。在你需要这种行为的地方使用for_each
已经足够清楚了。
发布于 2011-12-20 21:08:36
像这样的东西会起作用的:
std::for_each(dog_vec.begin(),dog_vec.end(),std::mem_fun_ref(&dog::bark));
我想有一种更简单的方法。
https://stackoverflow.com/questions/8581932
复制相似问题