c++ - 专门化类模板构造函数

标签 c++ templates specialization partial-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) { }

...\main.cpp(29): 错误 C3860: 类模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数 ...\main.cpp(29): 错误 C2976: 'Die' : 模板参数太少 ...\main.cpp(31): 错误 C3860: 类模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数

这些是我在 Microsoft Visual Studio 2010 中遇到的错误。我想要么我无法找出专门化的正确语法,要么不可能以这种方式执行此操作。

最佳答案

您的构造函数不是模板函数。你应该专注于整个类(class)。

关于c++ - 专门化类模板构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2672536/

相关文章:

c++ - 为深度优先搜索定义 ColorMap 的最简单方法

c++ - 部分模板-基于模板的特化与显式部分模板特化

c++ - 为什么 VS2015 中模板相关的嵌套类型名称不需要 typename 关键字?

C++模板偏特化成员函数

c++ - 指向基类 : how to call unique derived class method 的指针数组

c++ - 更改 while 循环以适应两种情况

C++ 读取直到检测到制表符

javascript - Handlebars 的模板继承

c++ - 模板特化问题

C++模板特化方法定义