Вы можете думать о различных решениях.В цикле, независимо от выбранного решения, всегда будет выполняться некоторый дополнительный код (в лучшем случае за кулисами), чтобы предотвратить выполнение функций.Вы можете пропустить выполнение цикла funX, но это будет дополнительный код, чтобы проверить, можно ли выполнить funX, расположив его по-другому.
Поскольку обычно инициализация выполняется перед другой задачей, это странная проблема, илинеправильное название (вы не должны называть его инициализацией).
Если хотите, функции могут вызывать инициализатор самостоятельно, например,
if (!initialized) initialize();
Всегда дополнительный код, и инициализированный! будетс этого момента всегда ложь.
Но способ избежать проверки снова и снова - это явно вызвать инициализацию в правильном месте, прежде чем игра начнет играть по-настоящему.(В противном случае не называйте это инициализацией).
Если бы это был объект, ... вам не нужен объект для этого.Чтобы «вызвать» конструктор, вы должны создать объект (по крайней мере, во многих языках ОО), скажем, с помощью new MyClass()
или «объявив его»;здесь вызов «new» (это не вызов, но для этой речи мы можем думать так) или «объявление» заменяется вызовом явного инициализатора.Ваш, очевидно, простой
Object a;
// ...
a.method(); //or
Object *a = new Object();
// ...
a->method();
будет
init()
// ...
funA();
Даже если этот пример не «соответствует» вашей «потребности», он должен прояснить, что явный инициализатор не так уж плохи языки OO действительно не нужны, чтобы «исправить» эту проблему.
Вы можете контролировать, когда вы можете вызывать эти функции, так что вам вообще не нужна проверка;это происходит во многих библиотеках, которые требуют сначала вызова специальной функции инициализации, прежде чем вы сможете их использовать, или следует ожидать «странного» поведения.