Как при создании объекта класса вызвать функцию, которую в дальнейшем нельзя будет вызывать (ни с помощью данного экземпляра, ни других экземпляров этого класса)?
Ответ
Для этого в C++ есть специальная функция и флаг, делается это так:
std::once_flag flag;
//...
class Class
{
Class()
{
std::call_once(flag, [this]{ SomeMethod(); });
}
void SomeMethod()
{...}
}
Таким образом мы вызовем SomeMethod() в конструкторе однажды, но это не запретит вызывать этот метод в других местах программы, поэтому его можно сделать приватным, но это не запретит вызов приватного метода в других методах класса. Для того, чтобы полностью исключить повторный вызов какого-либо кода, нужно весь этот код поместить в лямбду, которая передаётся в std::call_once
std::once_flag flag;
//...
class Class
{
Class()
{
std::call_once(flag, [this]
{
// Тут будет код, который нужно вызывать лишь единожды
});
}
}
Комментариев нет:
Отправить комментарий