我将模板结构声明为:
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)
{
/*...*/
}
};
答案 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;
}
编辑:这是不完整的,请参阅评论