2012-03-30 41 views
0
template<int n> 
struct Numberim{ 
    enum{ value = Numberim<n-1>::value + n }; 
}; 

template<> 
struct Numberim<0>{ 
    enum{ value = 0 }; 
}; 

這是一個簡單的tmp示例,它沒問題;模板元編程時結構和類之間的區別

template<int n> 
class Numberim{ 
    enum{ value = Numberim<n-1>::value + n }; 
}; 

template<> 
class Numberim<0>{ 
    enum{ value = 0 }; 
}; 

我用G ++編譯,並抱怨......然而,據我所知,struct和class幾乎在對待同一way.just這樣「在C++中,之間的唯一區別結構和類是默認情況下結構成員是公共的,並且類成員默認是私有的。「

那麼,他們在地球上有什麼不同?

+1

'它抱怨.'-它怎麼抱怨? – 2012-03-30 04:25:47

+0

你爲什麼認爲有區別? – josephthomas 2012-03-30 04:25:49

+0

@Jesse g ++說這樣的「錯誤:'Numberim <22> :: Numberim <22> ::價值'是私人的',好吧...我想我很天真地問這個問題。謝謝。 – 2012-03-30 04:30:01

回答

0

混凝土類Numberim<1>與具體類Numberim<0>無關。

因此,具有一個類引用其它’ S的value作品定義時valuepublic,它是爲struct,而不是當valueprivate,它是用於class

可以使用friend機制,也可以使value公開,或者你可以更簡單地說,做到這一點:

template<int n> 
class Numberim{ 
    enum{ value = n*(n+1)/2 }; 
    // And whatever else you want in here. 
}; 
0

的差異仍然是一樣的,當它試圖編譯Numberim<n-1>::valuen=1它試圖使用模板專業化。但是,由於valueprivateNumberim<0>的成員(因爲類成員變量默認爲private),因此會給編譯器帶來錯誤。

相關問題