C# delegate, C++ function pointer, Rust
C#은 안전한 함수 포인터 개체를 정의하는 delegate 형식을 제공한다. C++ 사용자정의함수에서 파라미터로 함수를 입력받기 위해 사용하는 개념과 동일하다.
c#에서는 delegate를 선언하고 사용하는 과정을 간소화하여 Action, Func, Predicate를 제공하고 있다. 참고로 delegate는 이벤트에서 사용하므로 C#에서 이해는 필수이다.
C++의 함수 포인터를 C#의 Func으로 표현해 보는 몇 가지 예제를 작성하였다. 특히 C++의 함수 포인터 예제는 유튜브 C/C++ 강좌로 유명한 두들낙서 94강. 함수 포인터를 참고하였다. Rust 예제포함.
Example 1 (C++, C#)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
using namespace std;
bool compare(int a, int b)
{
return a == b;
}
int main(void)
{
bool (*fp)(int, int) = compare;
bool result = fp(2, 2);
cout << result << endl;
cout << boolalpha << result << endl;
cout << string(result ? "True" : "False") << endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
void Main()
{
Func<int, int, bool> func = compare;
bool result = func(2, 2);
(result ? 1 : 0).Dump();
result.Dump();
}
bool compare(int a, int b)
{
return a == b;
}