Здравствуйте!
В одном из ответов увидел, что поле класса определяется таким образом:
void(My::*z)( int );
Поясните, пожалуйста такую запись. В каких случаях она используется?
Ответ
В каких случаях она используется? Такое поле используется в случаях, когда есть какая-то внешняя зависимость на метод класса. В моем примере эта зависимость от внутреннего состояния объекта. Без "указателя на метод" все равно пришлось бы вводить дополнительную переменную State. Но в таком случае, логика метода была бы не так очевидна. Вот тот же пример без z class My{ int State; public: My( void ) : State( 0 ){} void state( int x ){ switch( State ){ case 0: if( x == 1 ){ State = 1; } break; case 1: if( x == 2 ){ State = 2; }else{ State = 1; } break; case 2: if( x == 3 ){ State = 0; } break; } } } Очевидно, в таком варианте запутаться в номерах состояний гораздо проще, чем в исходном. Для лучшей ориентации по коду в таких случаях вводят enum class My{ enum{ state_1 = 0, state_2, state_3 }; int State; public: My( void ) : State( state_1 ){} void state( int x ){ switch( State ){ case state_1: if( x == 1 ){ State = state_2; } break; case state_2: if( x == 2 ){ State = state_3; }else{ State = state_1; } break; case 2: if( x == 3 ){ State = state_1; } break; } } } Но на мой взгляд, даже в таком случае исходный вариант выгоднее для понимания.
Комментариев нет:
Отправить комментарий