例如,如果谓词只使用一次,那么在main函数中声明类doubler是错误的吗?
#include <list>
#include <algorithm>
#define SIZE 10
int main()
{
std::list<int> myList;
for(int i=0; i<SIZE ;++i)
{
myList.push_back(i);
}
class doubler
{
public:
doubler(){}
int operator()(int a)
{
return a + a;
}
} pred;
std::for_each(myList.begin(), myList.end(), pred);
return 0;
}
答案 0 :(得分:14)
此设置的问题在于,至少在C ++ 03中,您不能使用本地仿函数作为模板参数,因为它没有外部链接。这意味着从技术上讲,上述代码不合法。但是,他们在C ++ 0x中修复它,因为它是一个相当愚蠢的限制,并且由于VS2010具有基本的C ++ 0x支持,上面的代码完全正常。
简而言之,您的问题的答案是,如果您正在使用符合C ++ 0x的编译器,那么它没有任何问题,但是否则您应该避免这样做以最大化交叉编译器的兼容性。
答案 1 :(得分:5)
因此,在任何一种情况下,您都应该使用不同的解决方案。