代码之家  ›  专栏  ›  技术社区  ›  Nick Strupat

专门化类模板构造函数

  •  2
  • Nick Strupat  · 技术社区  · 15 年前

    我正忙于模板专门化,我遇到了一个问题,试图根据使用的策略专门化构造函数。这是我要开始工作的代码。

    #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:类模板名称后面的模板参数列表必须按模板参数列表中使用的顺序列出参数

    这些就是我在微软visual studio 2010中遇到的错误。我在想要么我找不到合适的专门化语法,要么就是不可能这样做。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Kirill V. Lyadvinsky    15 年前

    构造函数不是模板函数。你应该专攻全班。

    推荐文章