2010-02-01 78 views

回答

16

這取決於。如果你想要A<C>B是不同但相關的類型,B應擴展A<C>。如果你想讓它們相同,你應該使用typedef。你能提供更多的上下文嗎?

+0

應該提到typedef不能預先聲明。因此,我更喜歡繼承。 – user877329 2017-01-11 17:47:17

4

這取決於你想要什麼。如果您使用不同的類來定製模板元編程,那麼最好創建B

如果你使用繼承只是爲了減少輸入,而不是一個合適的解決方案,你必須去typedef,他們是爲此而介紹的。

2

絕對是,如果意圖是給一個現有的數據類型一個新的名字,然後使用typedef。

1

嗯,我假設你正在使用空類來重複輸入A<C>。在那種情況下,我認爲typedef是一個更好的主意。至少,這似乎是最經常這樣做的方式。

讓我補充一點,這只是我的看法。人們並不完全同意使用typedef。雖然我認爲在這種情況下它是完全可以的。

在閱讀Jon Purdy的回答之後,我想補充一點,如果您需要擴展A而不是其他方式,則應該使用繼承。

1

取決於你想要的,效果是不一樣的。

C++ typedefs不是「強」,這基本上意味着BA<C>將是相同類型。如果你想能夠區分這兩者,請使用一個班級。

strong typedef的各種實現可以在網絡上找到,例如the boost one

2

這不完全相同。例如用typedef,你可以這樣做:

typedef A<C> B; 
func(B param) {...} 
... 
A<C> var; 
func(var); 
0

爲了完整性我想再添點:隨着

class B : public A<C> { }; 

你可以很容易向前聲明B:

class B; 
void func(B param);