2011-09-18 5 views
0

데이터 처리를위한 여러 함수를 호출하는 알고리즘이 있습니다. 이 함수들 각각은 많은 변수를 공유하고 조작합니다. 따라서 나는 많은 변수가 STL 컨테이너이므로 특히 읽기가 어려워지면 참조 인수의 긴 목록을 포함하는 함수 세트를 사용하지 않도록 노력하고 있습니다. 아마도 더 나은 방법이 있는지 난 그냥 궁금 해요함수를 사용하여 함수 작성기 호출하기

class myfunctor { 
private: 
    ... list of shared members ... 

    void A(..args..) { ..do some work on shared members.. } 
    void B(..args..) { ..do some work on shared members.. } 
    void C(..args..) { ..do some work on shared members.. } 

public: 
    void operator()(class1& X, class2& Y) { 
     A(..); 
     .. 
     B(..); 
     .. 
     C(..); 
     ..etc.. 
    } 
}; 

void algorithm(class1& X, class2& Y) { 
    myfunctor obj; 
    obj(X, Y); 
} 

아래와 같이 그 결과, 나는, 알고리즘의 작업을 수행하기 위해 펑터를 구현하고, 펑하는 기능 래퍼를 정의 같은 변수에 의존하는 여러 함수를 구현하고 이것이 나쁜 관행이라면?

+0

@anon는 -. 아, 내가 전에 그 눈치 적이 없어요. 고마워. – entitledX

+0

왜 이것을 함수가 아닌 함수로 만드시겠습니까? 인수 목록이 정말 다루기 힘들다면 'A (class1 & X, class2 & Y)', 'B (class1 & X, class2 & Y)'등을 사용하지 않을까요? – Beta

+0

함수 내에서 X와 Y는 어떻게 사용됩니까? 이 코드 샘플에서는 당신이 무엇을하려고하는지 명확하지 않습니다 - 좀 더 구체적인 예를들 수 있습니까? 설명에서 함수가 멤버 함수 여야한다고 들립니다. –

답변

3

동일한 공유 데이터에서 작동하는 umpteen 함수를 사용하여 데이터를 인스턴스 데이터로 사용하는 클래스의 멤버 함수로 만드는 것이 합리적인 선택입니다.

그러나 “ 펑터 ”은 아마도 beastie의 정확한 용어가 아닙니다.

훨씬 간단한 함수 포인터처럼 동작 : 자유롭게 볼 호출자 ’의 관점에서, 일반적으로 주위에 복사 할 수 있고, ’ t는 상태 변화 표시 케이. 당신의 짐승은 분명히 자유롭게 복사 할 수 없으며, 상태가 바뀌는 것처럼 보입니다. 나는 ’ d라는 beastie가 상태 기계 객체와 같으며 함수 호출에 의해 상태에서 상태로 가져 왔습니다.

건배 & HTH,