假設我想創建一個作用於某種常規類型的函子。 例如C模板仿函子。類模板vs函數模板
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?
}
第二個版本會工作嗎?或者我錯過了什麼?如果它起作用,第一種方法有什麼優勢?
你試過這個嗎? – 2012-07-11 14:21:15