Ну, скажем, Qt хочет, чтобы вы дали ему обратный вызов, который принимает указатель на QString в качестве аргумента: ваша C ++ typedef для обратного вызова будет выглядеть так:
typedef int (*callback_function)( QString *string);
Теперь, когда этот обратный вызоввызывается, вы никогда не можете быть уверены, что переданный аргумент действительно является QString: в C ++ это утверждение допустимо и, скорее всего, приведет к аварийному завершению вашего обратного вызова:
int MyCallback( QString *string )
{
if(string)
printf("QString value: %s\n", string->toAscii());
}
/* in another function */
char *badQstring = "Booohhh";
MyCallback( (QString *)badQstring ); // crash, badQstring is not a QString!
Поскольку C ++ допускает приведение, вы никогда не сможетеуверен, какой тип на самом деле передается вашему обратному вызову.Но это утверждение действительно для любой функции, даже если это не обратный вызов.