c ++模板棘手的局部特化const +模板成员

时间:2013-12-20 11:30:43

标签: c++ templates

我将模板结构声明为:

template <bool sel_c>
struct A
{
    A(){/*...*/}
    enum{
        is_straight = sel_c
    };
    typedef A<sel_c> this_t;
    typedef A<!sel_c> oposit_t;

    A(const this_t& copy){/*...*/}
    A(const oposit_t& copy){/*...*/}
    ~A(); //will be specialized latter for true/false

    template <class T> //this is my pain !
    void print(T& t);
};

如何声明两种print方法的专业化?

我已经尝试过以下(错误:错误C2244:'A :: print':无法将函数定义与现有声明匹配

template <class T>
void A<false>::print(T& t)
{
    /*...*/
}

以下(错误,上面没有复制构造函数声明):

template <> struct A<false>
{
    ~A()
    {
        /*...*/
    }
    template <class T>
    void print(T& t)
    {
       /*...*/
    }
};

2 个答案:

答案 0 :(得分:3)

template<>
template< class T >
void A<false>::print( T& t ) {}

答案 1 :(得分:0)

我没有看到你的第二个解决方案有任何问题,下面用g ++编译就好了:

template <bool sel_c>
struct A
{
    A(){/*...*/}
    enum{
        is_straight = sel_c
    };
    typedef A<sel_c> this_t;
    typedef A<!sel_c> oposit_t;

    A(const this_t& copy){/*...*/}
    A(const oposit_t& copy){/*...*/}
    ~A(); //will be specialized latter for true/false

    template <class T> //this is my pain !
    void print(T& t);
};

template <>
struct A<false>
{
    ~A(){};

    template <class T>
    void print(T& t) {}
};

template <>
struct A<true>
{
    ~A(){};

    template <class T>
    void print(T& t) {}
};


int main(int argc, char** argv)
{
    A<false> a1;
    A<true> a2;
}

编辑:这是不完整的,请参阅评论