Nic*_*pat 2 c++ templates partial-specialization specialization dice
我正在搞乱模板特化,我遇到了一个问题,试图根据使用的策略来专门构建构造函数.这是我试图开始工作的代码.
#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) { }
Run Code Online (Sandbox Code Playgroud)
...\main.cpp(29):错误C3860:类模板名称后面的模板参数列表必须按模板参数列表中使用的顺序列出参数...\main.cpp(29):错误C2976:'死':模板参数太少...\main.cpp(31):错误C3860:类模板名称后面的模板参数列表必须按模板参数列表中使用的顺序列出参数
这些都是我在Microsoft Visual Studio 2010中得到我想任我想不通的专业化正确的语法,也许它是不可能做这样的错误.
| 归档时间: |
|
| 查看次数: |
1566 次 |
| 最近记录: |