1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| template <class SRC, class DST>
void to(const SRC& src, DST& dst) // I
{
}
template <class SRC, class DST>
void to(const SRC& src, DST& dst) // II
{
// utilise le concept de conteneur compatible STL
// test l'existence de src.begin(), src.end(), dst.begin(), dst.end()
using SRC::begin();
using SRC::end();
using DST::begin();
using DST::end();
}
template <class SRC, class DST>
void to(const SRC& src, DST& dst) // III
{
// utilise le concept de conteneur à accès aléatoire compatible STL
// test l'existence de src.begin(), src.end(), dst.begin(), dst.end()
// test l'existence de src[], dst[]
using SRC::begin();
using SRC::end();
using DST::begin();
using DST::end();
using SRC::operator[] (size_type n);
using DST::operator[] (size_type n);
}
to(vector, array); // utilisera la spécialisation III
to(vector, list); // utilisera la spécialisation II
to(vector, myContainer); // version générique I |
Partager