Visual Studio 2010 + Visual Assist C ++: существуют ли автоматизированные способы создания геттеров и сеттеров? - PullRequest
3 голосов
/ 09 октября 2011

Итак, я создаю простой класс, такой как:

class file
{
public:
    boost::filesystem::path path;
    bool is_directory;
    boost::uintmax_t target_size;
    void get(boost::shared_ptr<boost::asio::ip::tcp::socket> socket, boost::shared_ptr<http_response> response);
    void set()
};

и я вижу, что если какая-то автоматизированная процедура предоставит мне диалог и создаст геттеры и сеттеры для некоторых из моих переменных (вместо того, чтобы я оставляю их открытыми или создаю каждую вручную), мой код API будет выглядеть лучше было бы проще для меня реализовать поток безопасности. Есть ли команда для выполнения такой грязной работы в VS2010 или в VA?

Ответы [ 2 ]

4 голосов
/ 09 октября 2011

Выберите переменную класса и в контекстном меню выберите Refactor (VA X) -> Encapsulate Field .Вы можете настроить формат, изменив Refactor Encapsulate Field сниппет.Вы можете найти больше о настройке фрагментов здесь .

Фрагмент, который я лично использую, дает Java-подобные средства доступа с заглушками документации doxygen:

//! \return
$end$$SymbolType$ get$GeneratedPropertyName$() const
{ 
    return $SymbolName$;
}
//! \param $SymbolName$
void set$GeneratedPropertyName$($SymbolType$ $SymbolName$) 
{ 
    this->$SymbolName$ = $SymbolName$; 
}

Конечно, это не идеальноВам все равно придется время от времени изменять результаты (корректировка констант, указателей, ссылок), но это занимает много времени.

В качестве альтернативы вы можете создать свой собственный фрагмент кода и запустить его из контекстного меню Окружить с помощью (VA X) , но у вас не будет доступа к переменным $ Symbol * $.

2 голосов
/ 09 октября 2011

Я не знаю о Visual Studio 2010, но в Visual Assist у вас есть команда ' Поле инкапсуляции ', и шаблон для этого рефакторинга можно изменить, как и все другие шаблоны.Если вам нужно разделить методы для создания многопоточных и не поточных безопасных методов доступа, вы, вероятно, можете написать отдельный шаблон, который выдает соответствующий код

...