假设我有两个类需要Traverse其他类的成员
class Reader {
public:
template<typename T>
void Process(const T& t) {
Traverse(*this, t);
}
//... ends of recursion
};
class Writer {
public:
template<typename T>
void Process(T& t) {
Traverse(*this, t);
}
//... ends of recursion
};
我为Traverse
和Reader
需要处理的每个类提供函数Writer
的重载。例如:
class Foo {
public:
template<typename T>
friend void Traverse(T& t, const Foo& foo) { // for class Reader
t.Process(foo.m1);
t.Process(foo.m2);
}
template<typename T>
friend void Traverse(T& t, Foo& foo) { // for class Writer
t.Process(foo.m1);
t.Process(foo.m2);
}
private:
int m1;
int m2;
};
Traverse
类主体中函数Foo
的上述两个重载几乎相同。我怎么能把它们做成一个?
答案 0 :(得分:1)
传递给const
参数的任何非const
值都会投放到const
,因此除非您确实需要,否则您不必使用第二个Traverse()
修改foo
。