模板特化的问题,应该简单,请高手指教,为啥编译不通过啊?
#include <iostream>
using namespace std;
class Alloc{};
template <typename T1,typename T2 =Alloc>
class Info
{
T1 t1;
T2 t2;
public:
template <typename T3>
static void Fun();
};
template <typename T1,typename T2 =Alloc>
template <>
void Info <T1,T2> ::Fun <int> ()
{
cout < < "tempalte function runned " < <endl;
}
int main()
{
Info <int> ::Fun <int> ();
system( "pause ");
return 0;
}
[解决办法]
你也太考验编译器了。貌似模板成员函数无法特化,用重载代替
[解决办法]
不可以吧
C++ template 199页说明template <> 不能跟在一个template parameter list之后
g++这样报错
template-id `Fun <int> ' for `void Info <T1, T2> ::Fun() ' does not match any template declaration
[解决办法]
template <class T1>
class A
{
public:
template <class T2>
static void fun();
template <>
static void fun <int> ();
template <>
static void fun <int> (){cout < < "int_okokok " < < endl;}
};
template <class T1> template <class T2>
void A <T1> ::fun(){cout < < "okokok " < < endl;}
int main()
{
A <int> ::fun <int> ();
A <int> ::fun <bool> ();
return 0;
}
[解决办法]
你可将特化版本写在类内
而且需在通用版本之后,这样可以
[解决办法]
C++ template 199页说明template <> 不能跟在一个template parameter list之后
====================================
写在类内这样避免