아래의 코드를 참조하십시오 :수없는
typedef void (*TimerCallback)(int RequestID_in, void* AdditionalParameter_in);
class MyTimer
{
public:
MyTimer(){}
bool schedule(int Interval_in, TimerCallback TimerCallback_in, void* AdditionalParameter_in)
{
//some logic
return true;
}
};
namespace
{
template <class T>
void myTimerFunc(int RequestID_in, void* AdditionalParameter_in)
{
MyLogic<T>* pLogic = static_cast<MyLogic<T>*>(AdditionalParameter_in);
if(pLogic)
{
//do something
}
}
}
template <class T>
class MyLogic
{
public:
MyLogic(){}
void testMe()
{
MyTimer aTimer;
aTimer.schedule(10, myTimerFunc<T>, this);
}
};
int main()
{
MyLogic<int> myLogic;
myLogic.testMe();
}
내가 VC6 컴파일러를 사용하고 컴파일러 오류 다음과 같은 예외 : 나는 비주얼이 코드를 테스트
error C2664: 'schedule' : cannot convert parameter 2 from 'void (int,void *)' to 'void (__cdecl *)(int,void *)' None of the functions with this name in scope match the target type E:\test\BTest\BTest.cpp(46) : while compiling class-template member function 'void __thiscall MyLogic::testMe(void)'
을 Studio 2008 및 아무 문제없이 잘 작동합니다.
VC6은 오래된 컴파일러이지만 내 프로젝트 소스 코드 (레거시)는 VC6으로 컴파일되어 있습니다.
따라서이 코드를 컴파일 할 수있는 방법은 없습니까?
typedef void (__stdcall *TimerCallback)(int RequestID_in, void* AdditionalParameter_in);
나는 이유를 모르겠어요,하지만 오류 메시지가 제안되는 내용은 다음과 같습니다
태그가 "6"이면 VC6을 의미합니까? – codymanix
예. 나는 바뀔 것이다. –
with '& myTimerFunc', 작동합니까? –
Scharron