2010-04-10 168 views
2

的模板我的模板,看起來像這樣:如何實例化模板

100 template<size_t A0, size_t A1, size_t A2, size_t A3> 
101 struct mask { 
103  template<size_t B0, size_t B1, size_t B2, size_t B3> 
104  struct compare { 
105   static const bool value = (A0 == B0 && A1 == B1 && A2 == B2 && A3 == B3); 
106  }; 
107 }; 
... 
120 const typename boost::enable_if_c< 
121 mask<a,b,c,d>::compare<2,3,0,1>::value || ...>::type 

我試圖實例比較結構。我如何獲得121行的價值?

+1

究竟問題出在哪裏? – 2010-04-10 20:25:38

+0

解析器扼流圈。我猜'比較<2',121,被解釋爲比較而不是模板 – Anycorn 2010-04-10 20:30:32

+0

你可以嘗試typedefing掩碼 ::比較<2,3,0,1>到一個單一的名字看到它有幫助,也檢查你沒有任何雙重的近距離括號>>會混淆解析器。 – James 2010-04-10 20:44:28

回答

6

你可能需要模板之前比較:

120 const typename boost::enable_if_c< 
121 mask<a,b,c,d>::template compare<2,3,0,1>::value || ...>::type 
+0

其實之前試過,但是忽略了流浪(. 但現在編譯,謝謝。 – Anycorn 2010-04-10 20:59:14

1

哦,我想你需要:

const typename boost::enable_if_c< __typename__ mask<a,b,c,d>::compare<2,3,0,1>::value || ...>::type