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

我看到,如果一些自动化程序会为我提供一个对话框并为我的一些变量创建 geters 和 setter(而不是我只是让 tham 公开或手动创建每个变量)我的代码 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$; 
}

当然它并不完美,您仍然需要不时修改结果(调整常量、指针、引用),但这需要很多时间。

或者,您可以创建自己的自定义片段并从上下文菜单Surround with (VA X)运行它,但您将无法访问 $Symbol*$ 变量。

于 2011-10-09T00:22:22.343 回答
3

我不了解 Visual Studio 2010,但在视觉辅助中,您有命令“封装字段”iirc,此重构的模板可以像所有其他模板一样进行修改。如果您需要分离方法来创建线程安全和非线程安全的访问器,您可能可以编写一个单独的模板来生成适当的代码

于 2011-10-08T23:15:17.097 回答