如何指定函数参数的常量是可选的?

时间:2015-03-02 13:29:38

标签: c++

假设我有两个类需要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
};

我为TraverseReader需要处理的每个类提供函数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的上述两个重载几乎相同。我怎么能把它们做成一个?

1 个答案:

答案 0 :(得分:1)

传递给const参数的任何非const值都会投放到const,因此除非您确实需要,否则您不必使用第二个Traverse()修改foo