Я возился с специализацией шаблона, и у меня возникла проблема с попыткой специализации конструктора на основе того, какая политика используется. Вот код, который я пытаюсь работать.Специализация конструктора шаблона класса
#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) : ошибка C2976: «Die»: слишком мало аргументов шаблона ... \ main.cpp (31): ошибка C3860: список аргументов шаблона, следующий за именем шаблона класса, должен перечислять параметры в порядке, используемом в списке параметров шаблона
являются ошибки, которые я получаю в Microsoft Visual Studio 2010. Я думаю, что я не могу понять правильный синтаксис для специализации, или, возможно, это невозможно сделать так.
Возможный дубликат http://stackoverflow.com/questions/1902827/c-template-specialization-of-constructor –