2015-03-02 131 views
1

假設我有兩個班需要遍歷其它一些類如何指定函數參數的常量是可選的?

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

的成員,我對每個類別ReaderWriter需要處理它們提供的功能Traverse超載。例如:

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

Foo類主體的功能Traverse上述兩個超載幾乎相同。我怎樣才能讓他們成爲一體?傳遞給const參數

+1

http://ideone.com/HWz2WJ – 2015-03-03 03:53:30

回答

1

任何非const值將被強制轉換爲const所以您不必到第二Traverse(),除非你確實需要修改foo

+0

我需要修改'foo',這就是爲什麼第二個類名爲'Writer'的原因。 – JAH 2015-03-02 13:58:21

+0

即使我不修改它們。 「const Traverse」中的't.Process(foo.m1)'仍然無法編譯,因爲'foo.m1'已經是const,但是't.Process'需要一個非const參數。 – JAH 2015-03-02 14:06:38

相關問題