Пожалуйста, используйте код ниже:
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, и компилятор выдает следующую ошибку:
ошибка C2664: «расписание»: невозможно
преобразовать параметр 2 из 'void
(int, void *) 'to' void (__cdecl
*) (int, void *) '
Ни одна из функций с этим именем в области не соответствует цели
тип
E: \ test \ BTest \ BTest.cpp (46): при компиляции члена шаблона класса
функция 'void __thiscall
MyLogic :: TestMe (аннулируются) '
Я тестировал этот код в Visual Studio 2008, и он работает без проблем.
Я знаю, что VC6 является устаревшим компилятором, но исходный код моего проекта (устаревший) все еще скомпилирован с VC6.
Следовательно, можно ли обойти этот компилятор?