Вы можете определить флаг stati c внутри Foo::Bar()
, который отслеживает, была ли функция уже вызвана:
bool Foo::Bar() {
static bool has_been_called; // initialized to false
if (!has_been_called) {
has_been_called = true
// ...
// do something
// ...
return true;
}
return false;
}
Для случая, когда несколько потоков могут вызывать функцию-член вместо этого вы можете использовать std::call_once()
; так как чтение флага has_been_called
выше не синхронизировано с записью.
bool Bar() {
static std::once_flag flag;
bool executed = false;
std::call_once(flag, [this, &executed]() {
// ...
// do something
// ...
executed = true;
});
return executed;
}