Мне не совсем понятно, что вы пытаетесь сделать. Если ваша цель
Чтобы использовать goto
, самое простое решение - реализовать алгоритм
точно так же, как вы обычно делаете, заменяя циклические конструкции wit goto
;
т.е. вместо:
for ( int i = 0; i < 10; ++ i ) {
std::cout << i << std::endl
}
Вы можете написать:
int i = 0;
goto label1:
label2:
std::cout << i << std::endl;
++ i;
label1:
if ( i < 10 ) goto label2;
В старые времена, с Фортраном IV, это то, что мы на самом деле делали.
Сегодня нет абсолютно никакой причины делать это (кроме, может быть, запутывания).
Интересно, однако, учитывая статические переменные, если вы не пытаетесь
реализовать какую-то подпрограмму; что каждый раз, когда вы вызываете функцию,
вы выводите один выше, чем в предыдущий раз. В этом случае я бы
рекомендую поддерживать состояние в классе, а не использовать статический
переменные. Кроме того, функция будет нуждаться в некотором возвращаемом значении
так что звонящий будет знать, когда он закончится, и звонящий
надо зациклить. Что-то вроде следующего должно помочь:
class CoRoutine
{
int i;
public:
CoRoutine() : i( 0 ) {}
bool function()
{
if ( i < 10 ) {
std::cout << i <<std::endl;
++ i;
}
return i < 10;
}
};
int
main()
{
CoRoutine c;
while ( c.function() ) {
}
return 0;
}
(Разумеется, goto
по-прежнему не требуется.)