Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

ExecuteAroundMethod

From ZeroWiki

Excute Around Method

같이 일어나야만 하는 행동은 어떻게 표현을 할 수 있을까? 예를 들면 파일을 열었다면 닫아야한다. DC를 얻어왔으면 해제해줘야 한다. 등등... 뭐 이런식으로 해주면 될 듯하다.

class Foo
{
public:
	void openFilenClose()
	{
		ifstream fin("data.txt");
		/* ... 작업 */
		fin.close();
	}
};

내가 보기엔 저 방법이 좋아보이는데... 클라이언트로 하여금 이 객체를 배우기가 더 어렵게 만든다고 한다. 그럴까? 잘 모르겠다. 좀 더 써보면 알 듯하다.


스몰토크에서는 다음과 같은 방법으로 해결하고 있다. 스몰토크에는 Block이라는 객체가 있다. 이 블록을 파라메터로 넘겨주는 것이다. 즉 1. 파일 연다. 2. 작업 블록을 파라메터로 넘겨준다. 3. 파일 닫는다. 이런식으로 되는 것이다. C++에서는 함수 포인터를 넘겨주는 방법으로 해결할 수 있을 듯하다. 이런 것을 Higher Order Programming이라고 했던 것 같다.(SICP) C++에서 멤버 함수는 원칙적으로 함수 포인터가 안되는 것으로 알고 있다. 그래도 그냥 그런가 보다 하자. 정말 이상하다.--;

 C++ 에서도 멤버함수에 대해 함수포인터 넘기기가 가능함. (문법은 생각 안남) --[1002]
void do( (void*) writeProcess() )
{
	fin.open("data.txt");	// 맞나?--;
	writeProcess();		
	fin.close();
}
void writeData()
{
	fin << "하이";
	fin << "nice to meet you."
}

int main()
{
	do(writeData);
}

SBPPSummary