我有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