2018年11月20日 星期二

c++ 的 method chain

在 c++ class 宣告中, 如果方法(method)傳回的是 this 指標, 該方法傳回型態就必須宣告成物件指標 *, 之後可以方便利用箭頭符號 -> 繼續串接(chain)該物件的其他方法, 但如果想用句點來串接又不希望複製物件本身, 那就要將該方法的傳回型態宣告成物件別名 &, 最後 return *this, 這樣就能利用句點符號繼續串接呼叫其他方法:
// method chain example
class myObject {
    myObject( ) {
        // constructor
    }
    myObject* self_pointer( ){
         // ...
         return this; // method chain by pointer ->
    }
    myObject& self_object( ){
         // ...
         return *this; // method chain by object  .
    }
    void other_method( ) {
         // other method
    }
}
int main(void ) {
   auto ptr = new myObject( ); // return this is a pointer
   auto obj = myObject( );         // return *this is an object
   ptr -> self_pointer() -> other_method( ) ; // call other method by pointer ->
   obj.self_object().other_method( ) ; // call other method by object .
}

沒有留言: