#include <iostream>
void print(void func(int)){
func(6);
}
int main(){
print(void ext(int r){
std::cout<<r;
});
return 0;
}
我想在参数内部定义一个函数,而不是在其他地方定义它并使用其名称作为参数。就像在javascripts中一样。
答案 0 :(得分:6)
在C ++ 11或更高版本中,您可以使用lambda:
执行此操作print([](int r){std::cout << r;});
由于print
采用普通函数指针,因此你只限于像这样的简单无状态lambda;你无法捕获任何东西。您可能希望通过使用模板的多态性为其提供更大的灵活性:
template <typename Function>
void print(Function func) {
func(6);
}
或输入删除:
void print(std::function<void(int)> func) {
func(6);
}
答案 1 :(得分:3)
使用C ++ 11中的两个新功能非常简单:std::function
和lambda expressions:
void print(std::function<void(int)> func)
{
func(6);
}
int main()
{
print([](int r){ std::cout << r; });
}
使用std::function
,您可以使用任何可调用对象,而不仅仅是lambda表达式。
例如:
// The `print` function as above
void print_num(int r)
{
std::cout << r;
}
int main()
{
print(print_num);
}
或者
// The `print` function as above
struct printer
{
void operator()(int r)
{
std::cout << r;
}
};
int main()
{
print(printer()); // Creates a temporary object
}