2012-03-15 35 views
3

讓我們用C++一個簡單的類開始:的typedef具體構造函數參數的一類

class aClass { 
     bool b; 
     aClass(bool x){b=x;} 
}; 

是否有可能的typedef 2種新型stateTrue和stateFalse這樣,如果我做的:

stateTrue variable; 

它會翻譯爲:

aClass variable(true); 

+0

一個'typedef'引入了現有類型的別名。如果你想要基於'aClass'的新類型,你需要的不僅僅是'typedef'。 – 2012-03-15 11:53:11

+0

您正試圖將編譯時結構(類型)與運行時值(成員'b'的值)混合使用。你真的需要解決什麼問題?通過了解問題而不是解決預期解決方案的問題,您可能會得到更好的答案。 – 2012-03-15 12:10:53

+0

那麼,我正在編寫一個解決特定方程的程序。該課程將代表「上」或「下」狀態。 typedef部分用於在需要特定狀態時更易於讀取代碼。 – UldisK 2012-03-15 12:48:11

回答

5

繼承的另一種可能是使aClass一個template

template <bool T> 
class aClass 
{ 
public: 
    bool b; 
    aClass(): b(T) {} 
}; 

typedef aClass<true> stateTrue; 
typedef aClass<false> stateFalse; 
+1

確實。儘管現在有'b'成員變量沒有什麼好處! – 2012-03-15 12:02:29

+0

@OliCharlesworth,同意...... – hmjd 2012-03-15 12:14:19

0

不,因爲這是一個實例,而不是一個類型。

你可以推導出:

class stateTrue: public aClass { 
public: 
    stateTrue() : aClass(true) {} 
}; 
+0

這是有效的,我沒有更好的答案,但是我個人並不關心它......在我的使用案例中,它看起來很醜。 – BuvinJ 2015-08-19 16:23:12

0

最接近的將是

class stateTrue : // new type needed, not just a new name 
    public aClass { // but obviously can be converted to aClass 
    public: stateTrue() : aClass(true) { } // Default ctor sets aClass base to true 
}; 
相關問題