를 사용하여 함수에 함수를 전달 나는이 같은 전화 확인하려면 :C++는 내가 두 펑터가 펑
CFunctor sine(2.);
SFunctor cosine(4.);
double x= 0.5;
double s = squarer(x, sine);
double c = squarer(x, cosine);
내가 함수 기금을 지정하려면 어떻게해야, 즉 그것의 앞에에가는 것입니다 대신 ?? _ ?? ?
를 사용하여 함수에 함수를 전달 나는이 같은 전화 확인하려면 :C++는 내가 두 펑터가 펑
CFunctor sine(2.);
SFunctor cosine(4.);
double x= 0.5;
double s = squarer(x, sine);
double c = squarer(x, cosine);
내가 함수 기금을 지정하려면 어떻게해야, 즉 그것의 앞에에가는 것입니다 대신 ?? _ ?? ?
당신은 내가 위의 템플릿 대답을 노크 아니에요 템플릿
template <class F>
double squarer(double x, F& func) {
double y = func(x);
return y * y;
}
와 함께 할 간단하게 할 수 있습니다. 사실,이 두 가지의 더 나은 선택 일지 모르지만, 나는 이것이 다형성으로도 가능하다는 것을 지적하고 싶었습니다. 예를 들어 ...
#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;
}
나는 이것이 전체 작업 데모이기 때문에 테스트하여 복사 할 수 있습니다. 터미널에 프린트 된 두 개의 다른 숫자를 실제로 볼 수 있습니다. 따라서 다형성이 펑터와 함께 사용될 수 있음을 증명합니다. 다시 말하지만, 이것이 템플릿 응답보다 낫다는 것을 말하는 것이 아니라, 단지 그것이 유일한 답이 아니라는 점을 지적하고 싶었습니다. 질문에 대한 답변을 얻었지만 정보를 얻고 자하는 사람에게 알리는 데 도움이되기를 바랍니다.
+1 좋은 직장! :) – 0x499602D2