2013-09-23 11 views
0

я изменил доступ к переменным класса от того, чтобы общественность частные,рефакторинга переменные доступа автоматически

затем создал Геттеры & сеттеры (100 переменных)

через некоторое время, после чего завершается,

как я могу автоматизировать доступ к любой из этих переменных напрямую, чтобы установить/получить, не пройдя через каждую из этих 100 переменных. когда-то переменная доступна почти повсюду в большом проекте, поэтому ее немного сложно сделать вручную.

Я использую Eclipse IDE, с ++ проекта

+0

Я не думаю, что вы можете легко изменить защиту вещей и «Найти и заменить» на них. Существует не простой способ сделать это с существующей частью проекта. –

+3

Просто мысль: если у вас есть 100 членов данных, возможно, вам нужно реорганизовать класс контейнера и разбить его на более мелкие классы. –

+0

Следовательно, причина, по которой вы не разрешаете доступ к вашим членам данных публично ... изменение открытого интерфейса - это PITA. –

ответ

3

Если ваш проект действительно большой & вы дооснащенией частного контроля члена в нее, вы можете найти полезный пойти альтернативный маршрут: Не осуществлять добытчик в все .... просто реализуйте сеттеры. Определите общедоступную ссылку const на каждую базовую переменную частного члена, которая служит для нее «getter». Любой код, который читает эти данные, может оставаться неизменным; вам нужно только обновить код, который устанавливает эти переменные, что может быть намного менее болезненным для обновления. Если вы идете по этому пути, вы должны инициализировать эти публичные ссылки в конструкторах, как это:

class fred { 
public: 
    fred() : stone(_stone) {} // every constructor must initialize all public references like this 
    void set_stone(int s) { _stone = s; } 
    int get_stone() { return _stone; } // Instead of this (or, in ADDITION to this), do this.... 
    const int& stone; // const public reference to internal private data member 
private: 
    int _stone; 
} 

Вы можете пойти с этим решением постоянно, или только до тех пор, пока обновления («когда-нибудь») закончить все ваши геттеры. Лично для классов, где типы данных их внутренних данных довольно очевидны & не изменится, я предпочитаю это решение в любом случае, так как код, написанный с ним, просто читать легче. I пожелал, что у C++ была функция operator classmember_setter<membername>(), которая позволит вам написать метод setter, который будет выглядеть так же, как вы просто обращались к элементу данных вместо вызова метода на нем; что приведет к получению более чистого кода, чем при использовании методов setter.

+0

Мне нравится эта идея, однако я желаю автоматизации IDE, подобно генерации геттеров и сеттеров. – aah134

 Смежные вопросы

  • Нет связанных вопросов^_^