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

C++ 使用模板将类函数应用于对象向量,c++,object,templating,C++,Object,Templating,假设我有不同对象的向量,比如说D是vector类型,R是vector类型。是否可以使用模板,这样我就可以自动让所有成员函数都可以在向量上调用?也就是说,如果Dog有一个函数Bark(),我希望D.Bark()使所有的狗都吠叫 现在,很明显,我可以用一个新函数和一个简单的循环手工编写这个行为,但是 有没有一个简单的方法来模板呢?也就是说,R.smash()在没有我的情况下打碎所有的石头 曾经明确地编码过那个循环。我试着想象语法会是什么,这让我大吃一惊 std::for_each(dogs.begi

假设我有不同对象的向量,比如说
D
vector
类型,
R
vector
类型。是否可以使用模板,这样我就可以自动让所有成员函数都可以在向量上调用?也就是说,如果
Dog
有一个函数
Bark()
,我希望
D.Bark()
使所有的狗都吠叫

现在,很明显,我可以用一个新函数和一个简单的循环手工编写这个行为,但是 有没有一个简单的方法来模板呢?也就是说,
R.smash()
在没有我的情况下打碎所有的石头 曾经明确地编码过那个循环。我试着想象语法会是什么,这让我大吃一惊

std::for_each(dogs.begin(), dogs.end(), std::bind(&Dog::bark, _1));
在C++03中,可以使用
boost::bind
。你可以试着把它包装在一个单独的函数模板中,但我觉得它买不到多少东西。在需要这种行为的地方使用


在C++03中,可以使用
boost::bind
。你可以试着把它包装在一个单独的函数模板中,但我觉得它买不到多少东西。在需要这种行为的地方使用

类似的方法可以:

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

我认为有一个更简单的方法。

像这样的方法会奏效:

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

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

循环本身必须进行编码,如果没有某种循环,就无法对向量中的每个对象执行任何操作。多么悲哀!我希望有一些函数模板的方法,这样函数就可以在。作为参数传入,然后可以在模板函数的循环中自动调用。循环本身必须进行编码,如果没有某种循环,就无法对向量中的每个对象执行任何操作。多么悲哀!我希望有一些函数模板的方法,这样函数就可以在。作为参数传入,然后可以在模板函数的循环中自动调用。谢谢。bind命令看起来像这里的键。我会仔细阅读的。这是最好的方法,但它仍然是“编码循环”。谢谢。bind命令看起来像这里的键。我会仔细阅读。这是最好的方法,但它仍然是“编码循环”。请注意,
mem\u-fun\u-ref
在C++11中被弃用。请注意,
mem\u-fun\u-ref
在C++11中被弃用。