2017-05-03 5 views
0

클래스 내에 함수와 매개 변수가 전달 된 함수가 있고 함수 호출에 바인딩 한 다음 다른 함수와 함수를 호출합니다.클래스 내의 C++ 템플릿

이 코드는 신속하게 함께 해킹되어 코드가 좋지 않다는 개념을 테스트합니다.

class Profiling { 
public: 
    template<class _Fn, class... _Args> GetProfile(_Fn&& _Fx, _Args&&... _Ax); 
    int GetTime(); 
    char Type; 
    int Size; 
private: 
    int StartTime; 
    int EndTime; 
}; 
template<class _Fn, class... _Args> Profiling::GetProfile(_Fn&& _Fx, _Args&&... _Ax) 
{ 
    StartTime = clock(); 
    function<void()> f = _STD bind(_Decay_copy(_STD forward<_Fn>(_Fx)), _Decay_copy(_STD forward<_Args>(_Ax))...); 
    f(); 
    EndTime = clock(); 

} 
int Profiling::GetTime() { 
    return EndTime - StartTime; 
} 

는이 오류를

오류이 오류 C4430을 얻을 : 타입 지정자 누락 - 가정 int로. 참고 : C++ 은 default-int를 지원하지 않습니다.

정말 도움이됩니다.

+1

'GetProfile'의 리턴 타입은 무엇이되어야합니까? – songyuanyao

+0

'_STD '란 무엇입니까? 밑줄 문자 앞에 대문자가 오는 이름은 임의의 목적을 위해 구현에 예약되어 있습니다. 따라서 코드에서 사용하면 정의되지 않은 동작이 발생합니다. (만약 std ::에 대한 #define이라면 왜 ***을 사용해야합니까? *** - 타이핑을 저장하지도 않습니다.) –

+0

@MartinBonner Microsoft의 C++ 표준 라이브러리에서 '_STD'는 다음과 같습니다. 내부의'yvals.h' 헤더에':: std ::'로 정의됩니다. – InternetAussie

답변

3

함수에 대한 반환 유형이 없습니다. 당신이 기능에 아무것도 반환하지 않기 때문에

template<class _Fn, class... _Args> 
/* return type here */ GetProfile(_Fn&& _Fx, _Args&&... _Ax); 

void 적절한 반환 형식이 될 것입니다.

+0

고마워, 내가 후에 실현 후 게시하려고했지만 "오류 오류 LNK1169 : 하나 이상의 곱하기 정의 된 기호" –

+0

죄송합니다, 이것은 다른 원인에 의해 발생했습니다. 당신의 도움을 주셔서 감사합니다! –