在javascript中可以执行以下操作:
SomeObject.somefunction(function(someparameters){
//do some things.
});
就像在jquery中的每个函数一样:
$('.rawdata').each(function(index){
$(this).attr('some',index);
});
我搜索并看到在c / c ++中我们可以使用函数指针作为参数使用函数,但是没有找到像上面那样做某事的方法:声明将指向的那一刻的函数它会被使用。这可能吗?如果不是,您会建议使用什么?
答案 0 :(得分:3)
查看lambda functions,在最新标准(C ++ 11)中添加到C ++中。
std::vector<int> vec;
// ...
// Double each element in the vector
std::transform(vec.begin(), vec.end(), [] (int elem) { return 2*elem; });
接收函数的参数必须是模板(其精确类型将自动从lambda函数本身中扣除),std::function<>
(一种类型擦除类,用于保存任何类型的给定原型的“可调用的东西”。
顺便说一下,函数指针不是在C ++ 11标准之前将函数式对象传递给C ++过程的唯一方法:任何重载operator()
的对象(即函数调用) operator)可以作为函数调用,并且被称为“函子”。使用STL 1 算法编程时,函数非常普遍。
答案 1 :(得分:2)
这是JavaScript中的匿名方法。 C ++没有匿名方法,因此无法复制确切的行为。
如你所说,你可以使用回调,但你必须事先声明它们,而不是在使用它们时。
答案 2 :(得分:1)
C ++ 0x有lambdas可以做同样的事情。
答案 3 :(得分:1)
您可以在C ++ 11中使用lambda函数。例如假设你push_back
有vector
个整数,你可以删除这样的奇数:
vector<int> v;
v.erase(remove_if(v.begin(), v.end(),
[] (int e) { return e%2 == 1; }), v.end());
答案 4 :(得分:1)