티스토리 뷰
위임 Delegate
1개 또는 그 이상의 함수를 호출한다.
먼저, 1행처럼 호출할 함수를 Delegate 로 선언한다.
Invoke() : 위임한 함수 호출
Delegate::Combine() : 다중 호출할 함수를 지정
Delegate::Remove() : Combine한 함수를 리스트에서 삭제
26행은 pOp는 square() 만 호출,
31행은 pOp3은 square() 와 square3() 2개 호출한다.
33행은 pOp4는 square(), square3(), square() 3개를 호출한다.
43행은 pOp4에서 pOp5 즉, square() 를 리스트에서 삭제하고 square()와 square3() 2개만 호출한다.
44행에서 pOp6는 pOp3과 같이 함수 호출하게 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 |
public delegate double NumericOp(double);
ref class Ops
{
public:
static double square(double d)
{
Console::WriteLine("square");
return d * d;
}
static double square3(double d)
{
Console::WriteLine("square3");
return d * d * d;
}
};
//__gc public CppForm : public Form // 1세대용
public ref class CppForm : public Form
{
public:
CppForm() {};
};
int main(array<System::String ^> ^args)
{
//Ops^ a = gcnew Ops;
NumericOp^ pOp = gcnew NumericOp(&Ops::square); // new 대신 gcnew, * 대신 ^ 사용
NumericOp^ pOp2 = gcnew NumericOp(&Ops::square3); // new 대신 gcnew, * 대신 ^ 사용
NumericOp^ pOp5 = gcnew NumericOp(&Ops::square); // new 대신 gcnew, * 대신 ^ 사용
NumericOp^ pOp3 = dynamic_cast<NumericOp^>(Delegate::Combine(pOp, pOp2));
NumericOp^ pOp4 = dynamic_cast<NumericOp^>(Delegate::Combine(pOp3, pOp5));
double result = pOp->Invoke(3.0);
Console::WriteLine("Result : {0}", result);
result = pOp2->Invoke(3.0);
Console::WriteLine("Result : {0}", result);
Console::WriteLine("=================================================");
result = pOp3->Invoke(3.0);
Console::WriteLine("=================================================");
result = pOp4->Invoke(3.0);
Console::WriteLine("=================================================");
NumericOp^ pOp6 = dynamic_cast<NumericOp^>(Delegate::Remove(pOp4, pOp5));
result = pOp6->Invoke(3.0);
Console::ReadKey();
} |
cs |
실행결과>