2013-01-19 33 views
-1

我剛剛瞭解了typedef。假設我有一個實例:typedef在方法的參數

private: 
    typedef std::string int doubles abc; 

當我做一個訪問器實例ABC:

returnType get(){...} 

什麼,我應該把在返回類型?它是abc還是數據類型? thx

+13

'typedef std :: string int doubles abc;'什麼? – chris

+0

你寫的是不正確的。 'typedef's只能有'typedef T1 T2'的形式,其中'T2'成爲'T1'的別名。 –

+3

跟我來。你會的。在一個世界上。純粹的想象... – Rubens

回答

2

我不確定你想在這裏做什麼。你的typedef是無效的語法,「雙打」不是C++類型(但可能只是一個錯字)。爲有效語法的例子是:

typedef std::string abc; 
typedef int foo; 
... 

然後,您可以使用typedef在功能上簽名,就像其他類型:

abc getValue(); 

雖然你應該把typedef在類的,如果public部分你想在公共成員函數中使用它。而且你應該知道,班級以外的代碼將始終必須在typedef前加上班級名稱,除非再次爲typedef'd。

class SomeClass { 
public: 
    typedef std::string foo; 
}; 

// Somewhere outside SomeClass 
SomeClass::foo bar = ... 
typedef SomeClass::foo localFoo; 
localFoo fooBar = ...; 

除此之外:typedef不提供任何方式具有可變代表一個以上的類型。 C++是一種靜態類型語言,因此這不是直接可能的。然而,你可以:

  • 使用多態類有一個共同的接口,派生類的實例然後可以像基類的實例處理,但做不同的事情
  • 使用union和一些鑑別儲存什麼鍵入它正在存儲
  • 使用void*和鑄造 - 不推薦!
  • 使用類似boost::variantboost::any等喜歡被別人建議

編輯:最後,您使用「實例」一詞的:它是usally用來指一個類的實例,即屬於一個類的特定對象。你的意思是一個「成員變量」。

+0

明白了。 thx男子:D – user1988385

+0

順便說一句,如果我有這樣的事情「typedef std :: string a []」,我應該在「returnType」上放什麼?它是[]嗎? – user1988385

+0

使用'std :: vector '。我絕不會推薦在C++中使用C數組。但是不,你只需要放一個'a',因爲它將是「數組std :: string」的別名,所以你不必再次添加'[]'。 –