一般的なタイプに作用するファンクターを作成したいとします。例えば
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
}
};
2番目のアプローチの利点は、テンプレートのタイプを明示的に指定する必要がないことです。
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?
}
2番目のバージョンは機能しますか?それとも私は何かが足りないのですか?それが機能する場合、最初のアプローチに何か利点はありますか?