2013-04-25 2 views
1

를 사용하여 함수에 함수를 전달 나는이 같은 전화 확인하려면 :C++는 내가 두 펑터가 펑

CFunctor sine(2.); 
SFunctor cosine(4.); 
double x= 0.5; 
double s = squarer(x, sine); 
double c = squarer(x, cosine); 

내가 함수 기금을 지정하려면 어떻게해야, 즉 그것의 앞에에가는 것입니다 대신 ?? _ ?? ?

답변

4

당신은 내가 위의 템플릿 대답을 노크 아니에요 템플릿

template <class F> 
double squarer(double x, F& func) { 
     double y = func(x); 
     return y * y; 
} 
+0

+1 좋은 직장! :) – 0x499602D2

0

와 함께 할 간단하게 할 수 있습니다. 사실,이 두 가지의 더 나은 선택 일지 모르지만, 나는 이것이 다형성으로도 가능하다는 것을 지적하고 싶었습니다. 예를 들어 ...

#include <math.h> 
#include <iostream> 
using std::cout; 
using std::endl; 

class BaseFunctor { 
public: 
    virtual double operator() (double t) = 0; 
protected: 
    BaseFunc() {} 
}; 

class SFunctor : public BaseFunctor { 
public: 
    SFunctor(double a) { _a = a; } 
    double operator() (double t) { return _a * sin(t); } 
private: 
    double _a; 
}; 

class CFunctor : public BaseFunctor { 
public: 
    CFunctor(double b) { _b = b; } 
    double operator() (double t) { return _b * cos(t); } 
private: 
    double _b; 
}; 

double squarer(double x, BaseFunctor& func) { 
    double y = func(x); 
    return y * y; 
} 

int main() { 
    SFunctor sine(.2); 
    CFunctor cosine(.4); 
    double x = .5; 
    cout << squarer(x,sine) << endl; 
    cout << squarer(x,cosine) << endl; 
} 

나는 이것이 전체 작업 데모이기 때문에 테스트하여 복사 할 수 있습니다. 터미널에 프린트 된 두 개의 다른 숫자를 실제로 볼 수 있습니다. 따라서 다형성이 펑터와 함께 사용될 수 있음을 증명합니다. 다시 말하지만, 이것이 템플릿 응답보다 낫다는 것을 말하는 것이 아니라, 단지 그것이 유일한 답이 아니라는 점을 지적하고 싶었습니다. 질문에 대한 답변을 얻었지만 정보를 얻고 자하는 사람에게 알리는 데 도움이되기를 바랍니다.