假设我想创建一个作用于某种通用类型的函子。例如
template<typename Ape>
class functor1
{
void operator()(Ape& m)
{
// Do something to m
}
};
这一直是我做事的标准方式。不过,我还有另一种方法:
class functor2
{
template<typename Ape>
void operator()(Ape& m)
{
// Do something to m
}
};
第二种方法的优点是我不必明确说明模板的类型。
int main()
{
std::vector<chimpanzee> chimps(100);
for_each(chimps.begin(), chimps.end(), functor1<chimpanzee>()); // Explicity state the type
for_each(chimps.begin(), chimps.end(), functor2()); // Less typing. Will it work?
}
第二个版本能用吗?还是我错过了什么?如果可行,第一种方法有什么好处吗?