gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:25 25 4
gpt4 key购买 nike

我在搞乱模板特化,在尝试根据使用的策略对构造函数进行特化时遇到了问题。这是我试图开始工作的代码。

#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): error C3860: 类模板名称后的模板参数列表必须按照模板参数列表中使用的顺序列出参数...\main.cpp(29): error C2976: 'Die': 模板参数太少...\main.cpp(31): error C3860: 类模板名称后的模板参数列表必须按照模板参数列表中使用的顺序列出参数

这些是我在 Microsoft Visual Studio 2010 中遇到的错误。我在想,要么我无法找出适合特化的正确语法,要么可能无法以这种方式进行。

最佳答案

您的构造函数不是模板函数。你应该对整个类(class)进行特化。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com