Незначительная функция функции класса не равна static
, чем обычная функция. Например,
class X {
public:
void foo();
};
void foo();
В описанном выше случае X::foo()
и ::foo()
отличаются друг от друга. Помните, что, X::foo()
под капотом somewaht как:
void X::foo (X* const this);
^^^^^ implicitly added
Таким образом, то, что вы пытаетесь сделать, приведет к непредсказуемому поведению .
Если вы настаиваете на том, чтобы вызвать функцию-член, используя свой адрес, тогда лучше сделать ее функцией-членом static
.
class X {
public:
static void foo();
};
void foo();
подписи для X::foo()
и ::foo()
одинаковы.
Редактировать: Из вашего комментария, похоже, что у вас нет контроля над исходным кодом. Я бы предложил использовать правильное соглашение о вызове для сигнатуры функции вместо жестко закодированного адреса. Псевдокод
typedef void (GameAudio::*caller_type)();
caller_type caller = &GameAudio::StopAllSounds;
GameAudio object;
(object.*caller)();
Вы уверены, что это всегда тот же адрес? –
Да, я уверен :) –
Что происходит, когда вы пытаетесь называть его? Вы пытались выполнить вызов в отладчике? А также помните, что все функции-члены класса имеют неявный аргумент 'this'. –