У меня странная проблема с моим кодом, так как компилятор генерирует код, который приводит к сбою моего тестируемого приложения.Я использую компилятор Visual C ++ 2010.Код:
template < typename TDstType,
typename TSrcType >
TDstType unsafe_cast( TSrcType anySrc )
{
return ( TDstType ) anySrc;
}
template < typename TDstType,
typename TSrcType >
TDstType brutal_cast( TSrcType anySrc )
{
return *( TDstType* ) &anySrc;
}
template < typename TParamType >
class EventHandler
{
public:
template < typename TObjectType >
EventHandler( TObjectType& refObject,
void ( TObjectType::*pfnMethod )( TParamType ) );
void operator()( TParamType anyParam );
private:
void* m_ptrMethod;
void* m_ptrObject;
};
template < typename TParamType >
template < typename TObjectType >
inline EventHandler< TParamType >::EventHandler( TObjectType& refObject, void ( TObjectType::*pfnMethod )( TParamType ) )
: m_ptrMethod( brutal_cast< void* >( pfnMethod ) ),
m_ptrObject( &refObject )
{
}
template < typename TParamType >
inline void EventHandler< TParamType >::operator()( TParamType anyParam )
{
class Class;
( unsafe_cast< Class * >( m_ptrObject )->*
brutal_cast< void ( Class::* )( TParamType ) >( m_ptrMethod ) )( anyParam );
}
И код приложения тестирования:
class SomeClass
{
public:
void Method( int intParam )
{
printf( "%d\n", intParam );
}
};
int main( int intArgc, char* arrArgv[] )
{
EventHandler< int > varEventHandler( *new SomeClass(), &SomeClass::Method );
varEventHandler( 10 );
return 0;
}
Скомпилированное приложение аварийно завершает работу при попытке чтения из недопустимого места в памяти.Я проверил в отладчике Visual Studio каждую переменную, идущую, но ни одна не содержит неверный адрес.Я надеюсь, что любой может помочь мне исправить это, поскольку я потерпел неудачу.Может быть, причина в передозировке кофе ...