gpt4 book ai didi

c# - C++ C# 委托(delegate)等效

转载 作者:行者123 更新时间:2023-11-28 02:45:23 25 4
gpt4 key购买 nike

我会尽量让这个问题简洁明了。

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 生成器。

最佳答案

例如

#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 表达式。

关于c# - C++ C# 委托(delegate)等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24610148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com