2010-04-20 96 views
2

我搞亂了模板專業化,並且遇到了一個問題,試圖根據使用的策略專門化構造函數。這是我想要工作的代碼。專門研究一個類模板的構造函數

#include <cstdlib> 
#include <ctime> 

class DiePolicies { 
public: 
class RollOnConstruction { }; 
class CallMethod { }; 
}; 

#include <boost/static_assert.hpp> 
#include <boost/type_traits/is_same.hpp> 
template<unsigned sides = 6, typename RollPolicy = DiePolicies::RollOnConstruction> 
class Die { 
// policy type check 
BOOST_STATIC_ASSERT((boost::is_same<RollPolicy, DiePolicies::RollOnConstruction>::value || 
     boost::is_same<RollPolicy, DiePolicies::CallMethod>::value)); 
unsigned m_die; 
unsigned random() { return rand() % sides; } 
public: 
Die(); 
void roll() { m_die = random(); } 
operator unsigned() { return m_die + 1; } 
}; 

template<unsigned sides> 
Die<sides, DiePolicies::RollOnConstruction>::Die() : m_die(random()) { } 
template<unsigned sides> 
Die<sides, DiePolicies::CallMethod>::Die() : m_die(0) { } 

... \ main.cpp中(29):錯誤C3860:模板參數列表下面的類模板的名稱必須在模板參數列表 使用的順序列出參數... \ main.cpp中(29) :error C2976:'Die':太少的模板參數 ... \ main.cpp(31):error C3860:模板參數列表後面的類模板名必須按模板參數列表中使用的順序列出參數

那些是我在Microsoft Visual Studio 2010中遇到的錯誤。我想我無法弄清楚專業化的正確語法,或者也許這樣做是不可能的。

+0

http://stackoverflow.com/questions/1902827/c-template-specialization-of-constructor可能的重複 – 2010-04-20 04:45:32

回答

5

您的構造函數不是模板函數。你應該專門研究整個班級。