1
더 유용한 프로그래밍 스타일을 채택하여 모듈 식 및 재사용 가능한 구성 요소로 임시 프로그램을 추출하려고하지만 모든 것을 두 번 쓸 수 있습니다.C++ 함수 개체 템플릿 인수 공제 스타일
예를 들어 구성 가능한 함수 개체 step
에 의해 업데이트되는 상태 인 stateT state
이 있습니다. 나는이 make_stepper
template<typename sT, typename T1, typename T2>
auto make_stepper(sT state, T1 func1, T2 func2) {
return Step<sT,T1,T2>(func1, func2);
}
을 한
auto step = Step<stateT,typename_of_func1,typename_of_func2>{func1, func2};
입력 할 필요가 없습니다 것이다 그래야
template<typename sT, typename T1, typename T2>
struct Step {
T1 func1;
T2 func2;
Step(T1 f1, T2 f2) : func1(f1), func2(f2) {}
sT operator()(sT state) {
state.A = func1(state.A);
... using func2() and internals of state ...
}
};
지금은
stateT state{...constructor arguments...};
auto step = make_stepper(state, func1, func2);
state = state(step);
멋진 인터페이스를 제공하기 위해 쓸 수 있습니다 나는을 쓰는 것을 끝내었다.은 모든 템플릿 기능 객체 X
에 대한 함수입니다. 이 스타일이 좋은가요 아니면 그냥 속이는거야? make_X
함수 작성을 피할 수 있습니까? 또는 전체 접근 방식을 변경해야합니까?
'자동'의 재 해석 이후, 실제로 상황은 이전보다 훨씬 더 좋게되었습니다. – molbdnilo
만들어진 복사본의 수를 제한하려면'make_stepper'에서 ** perfect forwarding **을 사용해야합니다. – MFH
@MFH : 이전의 [질문] (http://stackoverflow.com/questions/21230320/what-is-the-correct-argument-type-for-a-function-object)을 참조하십시오. – Mankka