2011-12-20 55 views
0

假设我有不同对象的向量,例如D的类型为vector<Dog>R的类型为vector<Rock>。是否有可能使用模板,以便我可以自动让所有成员函数在矢量上可调用?即如果Dog有一个功能Bark(),我想D.bark(),使所有的狗树皮。使用模板将类功能应用于对象矢量

现在,很明显,我可以用一个新的函数和一个简单的循环手工编写这个行为,但有 有一个简单的方法来模板吗?即让R.smash()摔破没有我所有的岩石 曾经明确地编码该循环。我试图想象语法会是什么,它正在让我大开眼界。

+0

本身所具有的环路进行编码,就没有办法把一个向量中每个对象上的任何动作,而某种循环。 – Chad 2011-12-20 21:05:00

+0

多难过!我希望有某种功能模板的方式,使得后面的功能。作为参数传入,然后可以在模板函数的循环中自动调用该参数。 – andyInCambridge 2011-12-20 21:16:02

回答

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

在C++ 03中,您可以改为使用boost::bind。你可以尝试把它包装在一个单独的函数模板中,但我有一种感觉,它不会给你买太多东西。在需要这种行为的地方使用for_each已经足够清楚了。

+0

谢谢。绑定命令看起来像这里的关键。我会阅读它。 – andyInCambridge 2011-12-20 21:09:40

+0

这是最好的方法,但它仍然是“编码循环”。 – Chad 2011-12-21 02:28:25

2

像这样的工作:

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

我想有一个更简单的方法。

+1

请注意,mem_fun_ref在C++ 11中已弃用。 – 2011-12-20 21:15:05