- 主题:模板类内的模板函数,特化问题
我改了改,这样可以编译通过。但是和你的需求还是有点差异。
#include<iostream>
using namespace std;
struct S1{};
struct S2{};
struct S3{};
template<typename T1, typename T2>
class X
{
public:
void print(T2 &v){}
};
template<typename T1>
class X<T1, S1>
{
public:
void print(S1 &v){ cout << "S1" << endl; }
};
template<typename T1>
class X<T1, S2>
{
public:
void print(S2 &v){ cout << "S2" << endl; }
};
template<typename T1>
class X<T1, S3>
{
public:
void print(S3 &v){ cout << "S3" << endl; }
};
int main()
{
S1 s1;
S2 s2;
S3 s3;
X<int, S1> x1;
X<int, S2> x2;
X<int, S3> x3;
x1.print(s1);
x2.print(s2);
x3.print(s3);
return(0);
}
【 在 maxpi 的大作中提到: 】
: 代码:
: #include<iostream>
: using namespace std;
: ...................
--
FROM 219.143.130.*
或者这样,类成员函数的特化在类声明里进行:
#include<iostream>
using namespace std;
struct S1{};
struct S2{};
struct S3{};
template<typename T1>
class X
{
public:
template<typename T2>
void print(T2 &v){}
void print(S1 &v){ cout << "S1" << endl; }
void print(S2 &v){ cout << "S2" << endl; }
void print(S3 &v){ cout << "S3" << endl; }
};
int main()
{
S1 s1;
S2 s2;
S3 s3;
X<int> x1;
X<int> x2;
X<int> x3;
x1.print(s1);
x2.print(s2);
x3.print(s3);
return(0);
}
【 在 maxpi 的大作中提到: 】
: 代码:
: #include<iostream>
: using namespace std;
: ...................
--
FROM 219.143.130.*
这样就是特化了吧
template<typename T1>
class X
{
public:
template<typename T2>
void print(T2 &v){}
template<> void print<S1>(S1 &v){ cout << "S1" << endl; }
template<> void print<S2>(S2 &v){ cout << "S2" << endl; }
template<> void print<S3>(S3 &v){ cout << "S3" << endl; }
};
【 在 here080 的大作中提到: 】
: 这个是重载。
: 应该不需要强制在类声明里定义。
:
--
FROM 219.143.130.*
template<typename T1>
class X
{
public:
template<typename T2>
void print(T2 &v){}
template<> void print<S1>(S1 &v){ cout << "S1" << endl; }
template<> void print<S2>(S2 &v){ cout << "S2" << endl; }
template<> void print<S3>(S3 &v){ cout << "S3" << endl; }
};
【 在 maxpi 的大作中提到: 】
: 代码:
: #include<iostream>
: using namespace std;
: ...................
--
FROM 219.143.130.*