读书人

模板婚配的疑惑

发布时间: 2013-05-02 09:39:29 作者: rapoo

模板匹配的疑惑

#include <utility>
#include <iostream>

using namespace std;

template<int N, typename T>
class DuoT;

//解析 A int, B为prir<char, double>
template<typename A, typename B>
class DuoT<1, pair<A, B>>
{
public:
typedef A ResultT;
};

template<typename A, typename B>
class DuoT<2, pair<A, B>>
{
public:
typedef B ResultT;
};

template<int N, typename A, typename B, typename C>
class DuoT<N, pair<A, pair<B, C>>>
{
public:
typedef typename DuoT<N - 1, pair<B, C>>::ResultT ResultT;
};

template<typename A, typename B, typename C>
class DuoT<1, pair<A, pair<B, C>>>
{
public:
typedef A ResultT;
};

template<typename A, typename B, typename C>
class DuoT<2, pair<A, pair<B, C>>>
{
public:
typedef B ResultT;
};

template<int N, typename T1, typename T2>
void printDuoT(const pair<T1, T2>&)
{
cout << typeid(DuoT<N, pair<T1, T2>>::ResultT).name() << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
pair<int, pair<char, double>> d2;
printDuoT<1>(d2);

return 0;
}


注释掉:
template<typename A, typename B, typename C>
class DuoT<1, pair<A, pair<B, C>>>
{
public:
typedef A ResultT;
};

template<typename A, typename B, typename C>
class DuoT<2, pair<A, pair<B, C>>>
{
public:
typedef B ResultT;
};


会出现错误?请问为什么??
[解决办法]
注释掉以后存在二义性,没有最佳匹配。
DuoT<N, pair<T1, T2>>::ResultT 具体是。
N == 1
T1 == int
T2 == pair<char, double>
此套模板实参可以匹配 class DuoT<1, pair<A, B>>,其中
A == T1 == int,
B == T2 == pair<char,double>
也可以匹配 class DuoT<N, pair<A, pair<B, C>>>,其中
N == 1
A == T1 == int
B == char
C == double

读书人网 >C++

热点推荐