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); }