我有3個類。在它最簡單的形式,它看起來像,使用常量和非常量函數 - C++
class tree
{
public:
tree_node* find_node(const std::string& text) {
return factory.find(text);
}
private:
tree_node_factory factory;
}
class tree_node
{
public:
tree_node(const std::string& text) : text_(text) {}
const std::string& text() const {
return text_;
}
void set_parent(const tree_node* new_parent);
private:
std::string text_;
}
class tree_node_factory
{
public:
tree_node* find(const std::string& text);
private:
std::vector<tree_node*> allocated_nodes;
}
我不想讓的tree
用戶修改通過像find_node
方法返回的tree_node
。所以我改變了,find_node
和tree_node_factory::find
於
const tree_node* find_node(const std::string& text) const {
return factory.find(text);
}
const tree_node* find(const std::string& text) const;
問題是tree
內部應該可以修改節點,像set_parent
方法的工作。但由於工廠僅返回const
節點,我最終在工廠中增加了另一個過載(非常量版本)find
。
tree_node* find(const std::string& text);
我想知道這是處理這類問題的正確方法嗎?我發現代碼在const和非const版本中得到了重複。
任何想法..?
這是正常的;看看大多數STL類,你會看到它們提供了const和非const的版本。我認爲Sutter談論了一種使用(格式良好)'const_cast'和'static_cast'的方式來刪除代碼重複(通過調用其他版本);我懷疑有人會發布它。但是,這是正常的。 – GManNickG 2010-02-14 06:52:03
很酷。謝謝GMAN。 – 2010-02-14 06:56:19
Duplicate - http://stackoverflow.com/questions/123758/how-do-i-remove-code-duplication-between-similar-const-and-non-const-member-funct – Manuel 2010-02-14 07:54:28