我会尽量保持这个问题的简洁。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Something {
static class Program {
[STAThread]
static void Main() {
int blah = DoSomethingWithThis( delegate {
Console.WriteLine( "Hello World" );
} );
}
public static int DoSomethingWithThis( Action del ) {
del.Invoke(); // Prints Hello World to the console
int someArbitraryNumber = 31;
return someArbitraryNumber;
}
}
}
在C#中我可以使用匿名方法作为参数来做这样的事情; 我想知道是否有人可以在C ++中向我展示同样的东西,或者类似的东西会促进相同的结果。我计划使用类似上面代码的东西为我的C ++游戏创建一个DisplayList生成器。
答案 0 :(得分:2)
例如
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
int main()
{
std::vector<std::string> v = { "Hello ", "Wordl" };
std::for_each( v.begin(), v.end(),
[]( const std::string &s) { std::cout << s; } )( "\n" );
return 0;
}
输出
Hello Wordl
因此,您可以自己编写一些函数,接受函数对象(或类型为std :: function的对象)作为参数,然后传递lambda表达式作为参数。
例如
#include <iostream>
#include <string>
#include <functional>
int DoSomethingWithThis( std::function<void( void )> del )
{
del();
int someArbitraryNumber = 31;
return someArbitraryNumber;
}
int main()
{
int blah = DoSomethingWithThis( [] { std::cout << "Hello World"; } );
std::cout << "\nblah = " << blah << std::endl;
return 0;
}
输出
Hello World
blah = 31
在C#中,您也可以用匿名方法替换lambda表达式。