#include <iostream>
using namespace std;
struct true_type{};
struct false_type{};
template<class _T>
struct IteratorTrait
{
typedef false_type is_base_type;
};
template<class _L, class _R>
bool Copy(_L* _pl, _R* _pr)
{
return Copy(_pl, _pr, IteratorTrait<_R>::is_base_type());
}
template<class _L, class _R>
bool Copy(_L* _pl, _R* _pr, true_type)
{
cout<<"Copy, true_type"<<endl;
return true;
}
template<class _L, class _R>
bool Copy(_L* _pl, _R* _pr, false_type)
{
cout<<"Copy, false_type"<<endl;
return true;
}
class A{};
class B{};
class C{};
template<>
struct IteratorTrait<C>
{
typedef true_type is_base_type;
};
void main()
{
A a;
B b;
C c;
Copy(&a, &b);
Copy(&a, &c);
system("pause");
}
//----------
traits 技术可用于算法优化。 例如接口总是整个队列和相关数据, 但是通过traits决定是所有都遍历,还是取特定ID。