2011-10-28 3 views
0

까다로운 코드가있어 조각에 붙어 있습니다.해당 함수 내에서 구조체에 함수 참조를 전달하십시오.

저는 가상 기본 클래스의 자손입니다.

그 기능은 functor입니다. 펑터는이 함수와 그 부모 클래스 내부의 모든 객체에 액세스 할 수 있어야합니다. 그러나 "this"또는 함수 이름에 대한 참조를 전달할 때 오류가 발생합니다.

이 모든 복잡한 이유는 코드 속도를 높이는 데 있습니다. 내가 코딩하는 알고리즘은 정말 비싼 부분이 하나뿐입니다. 제 의도는 그 부분을 병렬 처리하는 것입니다. 그러나이 단계는 두 개의 값을 여러 단계를 거쳐 동시에 누적합니다. 따라서 일부 연산자를 재정의해야합니다. functor는 이것을 구현하는 가장 쉬운 방법처럼 보였다.

누구든지이 문제를 해결할 수있는 방법을 제안 할 수 있습니까? 아래

대표 코드 :

myClassA Glm{ 
public: 
    virtual int functionA(int a, int b)=0; 
} 

class myClassB : public myClassA { 
    public: 
    virtual int functionA(int a, int b); 
} 

int functionA(int a, int b){ 


    // do some stuff 

    struct MyFunctor : public binary_function<Fraction, DoubleIterator, Fraction> { 

     MyFunctor(myClassA& in_class, int A) : myClassA(in_class), column(iColumn) { 

     }     
     myClassA& myClassA; 
     int A; 

     Fraction operator()(double B, int A,) { 

      double C = doFancyStuff(A,B); 
      return C; 
     } 

    } 

    //use stl to accumulate 
    accumulate(data.begin(), data.end(), temp, MyFunctor(*this, column)); 

} 
+0

당신이 얻을 오류가 무엇입니까? – crazyjul

답변

1

가장 큰 문제는 여기 조기 최적화입니다.

기술적으로 현재 & hellip;

int functionA(int a, int b){ 

with & hellip; this

int myClassB::functionA(int a, int b){ 

적어도 문제는 사라질 것이다.

그런 다음 & hellip과 같이 데이터 회원으로 참조를 배치하면 안됩니다.

myClassA& myClassA; 

은 인스턴스를 할당 할 수 없도록 만듭니다. 그리고 functor 객체 “은 ”으로 지정되어야합니다. 따라서이 작업을 계속 진행하려면 & hellip으로 대체하는 것이 더 좋습니다.

myClassA* pMyClassA_; 

그리고 그에 따라 초기화를 변경하십시오.

건배 & HTH.,

+0

불행히도 어젯밤 3시에 내 게시물에 오타를 만들었습니다. 실제 코드는 * myClassB :: functionA (int a, int b) – Noah

관련 문제