2015-01-02 80 views
2

我有重載()運算符類:()操作符重載在左側C++

class Animal 
{ 
public: 
    string sound; 
    Animal (string a): sound(a) {} 

void operator()() 
    { 
    cout<<sound<<endl; 
    } 
}; 

int main() 
{ 
    Animal dog("hau hau"); 
    dog(); 
} 

但是,是否有可能,我可以在左側得到相同的結果與()?

()dog; 

我知道我可能永遠不會需要這一點,但我只是好奇,如果有可能

回答

2

不,你不能這樣做:C++沒有像這樣的結構的語法。

重載operator()背後的目的是讓您的類的對象參與函數調用表達式,其中您的對象表示被調用的函數。 C++沒有調用函數的語法,或者其他括號在主表達式之前(在你的情況下是一個標識符),所以你的問題的答案是「否」。

2

沒有,因爲必須有在()之前的主要表現。

另外請記住,編譯器會向後讀取,所以他不會知道這應該是一個函數。

1

。這不可能。不符合標準,安全,符合標準的方式。

1
  1. ()左側的鑄造僅
  2. #YAGNI