4

だから私は次のような単純なクラスを作成しています:

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()
};

いくつかの自動化された手順がダイアログを提供し、いくつかの変数のゲッターとセッターを作成する場合 (tham を public のままにしたり、手動で作成したりするのではなく)、コード API が見栄えがよくなり、簡単になることがわかります。スレッドセーフを実装するために。VS2010またはVAでそのような汚い仕事をするためのコマンドはありますか?

4

2 に答える 2

4

クラス変数を選択し、コンテキスト メニューからRefactor (VA X) -> Encapsulate Fieldを選択します。Refactor Encapsulate Fieldスニペットを変更することで、フォーマットをカスタマイズできます。スニペットのカスタマイズの詳細については、こちらをご覧ください。

私が個人的に使用するスニペットは、doxygen ドキュメント スタブを含む Java のようなアクセサーを生成します。

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

もちろん、これは完璧ではありません。結果を時々変更する必要があります (constness、ポインター、参照を調整する)。

または、独自のカスタム スニペットを作成し、コンテキスト メニュー[Surround with (VA X) ] から実行することもできますが、$Symbol*$ 変数にはアクセスできません。

于 2011-10-09T00:22:22.343 に答える
3

Visual Studio 2010 についてはわかりませんが、ビジュアル アシストでは「フィールドのカプセル化」というコマンドがあります。このリファクタリングのテンプレートは、他のすべてのテンプレートと同様に変更できます。スレッド セーフなアクセサーと非スレッド セーフなアクセサーを作成するためにメソッドを分離する必要がある場合は、おそらく、適切なコードを生成する別のテンプレートを作成できます。

于 2011-10-08T23:15:17.097 に答える