2013-03-27 62 views
0

我正在處理一個相當大的項目,並且提出了一個我不明白的聲明。它看起來像這樣:函數調用前面的類型聲明是什麼意思

visitor::DFV<Outer> visitor(*this, this->graph(), this->store()); 

我會給你更多的代碼,但它是真正巨大的,我真的不能告訴哪些部分是有關這一點。有趣的是,我甚至無法在DFV結構中找到任何叫做visitor的函數或者它的前身,Eclipse也沒有。我很確定我沒有得到這個權利的意義,我無法找到任何這種c + +語法的參考。任何人都可以向我解釋一般這樣的陳述的含義嗎?

Type<SomeClass> foo(x, y); 
+1

第二個定義了一個名爲'類型的'類型foo'的對象,條件是有兩個參數的構造,'x'和'初始化y'。 – 2013-03-27 22:18:08

+1

爲什麼在沒有對C++語法的恰當知識的情況下開展「一個相當大的項目」?我建議你閱讀[好書](http:// stackoverflow。com/questions/388242/the-definitive-c-book-guide-and-list)首先 – 2013-03-27 22:27:50

+0

謝謝,你一直很有幫助。我對代碼和所有不熟悉的模板用法感到不知所措,而且我忽略了基本知識。儘管我在整個下午都在想這個問題,但是我在發佈問題5分鐘後自己找到了答案,並開始用鍵盤敲打我的頭。 – SirGlorg 2013-03-27 22:44:49

回答

3

這不是函數調用,而是變量定義,(...)是構造函數參數列表。

難道是因爲

typedef visitor::DFV<Outer> Type; 

//... 
Type visitor(*this, this->graph(), this->store()); 

Type visitor(x, y, z); 
0

更加清晰爲了您的一般示例:

Type<SomeClass> foo(x, y); 

這是一個變量定義,其中Type<SomeClass>是的類型變量,foo是它的名字,其餘的是傳遞給這個類的參數'構造函數。

類模板Type會有一些構造,在其定義中(通常是在其頭文件),它看起來像:

template< typename T > 
class Type 
{ 
public: 
    Type(int x, int y); 
}; 
+0

值得補充的是,範圍'visitor ::'可能引用一個名爲'visitor'的類或名稱空間。 – Keith 2013-03-27 22:32:46

0

我不認爲你真的瞭解C++非常好,如果你不」得到這個語法。

visitor::DFV<Outer> visitor(*this, this->graph(), this->store()); 

我會將此解釋爲功能無論是在訪問者類的靜態函數或命名空間中的訪問者全局函數,這就是所有我能與現有的代碼說。該<Outer>部分功能,例如,如果我做的模板參數這樣

template<class T> 
int someFunc<T>(T i, Tx) 
{ 
    //whatever operations in the function 
} 

模板,然後,當我想調用該函數我只是這樣做

int i = someFunc<int>(2, 3); 
//alternatively 
int x = someFunc<std::string>("Hello", "World"); 

*this是derefenced指針到正在調用該函數的類,this->graph()是調用此函數的類graph()中的方法的返回值,this->store()與圖相同,但返回值爲store()

第二位被實例化一個模板類這樣

template<class T> 
class Type 
{ 
public: 
    Type(T x, T y); 
}; 
+0

「我會將此解釋爲一個函數,它既可以是類訪問器中的靜態函數,也可以是名稱空間訪問器中的全局函數,我只能使用可用的代碼進行說明。」它也不能,你在說什麼? – 2013-03-27 22:56:12

+0

它怎麼可能不是?如果你調用一個像這個'foo :: bar()'這樣的函數,它可能是一個名爲foo的名字空間函數bar,或者是一個名爲foo的類中的靜態函數。我不明白什麼是不能得到的? – 2013-03-27 23:08:00

+0

是的,但不能調用函數*和*在同一語句中聲明它的類型。 – 2013-03-28 06:54:34

相關問題