E D R , A S I H C RSS

Execute Around Method

Excute Around Method

같이 일어나야만 하는 행동은 어떻게 표현을 할 수 있을까? 예를 들면 파일을 열었다면 닫아야한다. DC를 얻어왔으면 해제해줘야 한다. 등등...
뭐 이런식으로 해주면 될 듯하다.
~cpp 
class Foo
{
public:
	void openFilenClose()
	{
		ifstream fin("data.txt");
		/* ... 작업 */
		fin.close();
	}
};
내가 보기엔 저 방법이 좋아보이는데... 클라이언트로 하여금 이 객체를 배우기가 더 어렵게 만든다고 한다. 그럴까? 잘 모르겠다. 좀 더 써보면 알 듯하다.

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

~cpp 
void do( (void*) writeProcess() )
{
	fin.open("data.txt");	// 맞나?--;
	writeProcess();		
	fin.close();
}
void writeData()
{
	fin << "하이";
	fin << "nice to meet you."
}

int main()
{
	do(writeData);
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0814 sec