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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include <iostream>
template<template<typename T> class stockage,typename precision> class Vecteur : stockage<precision> {};
template<class T> struct dense{};
template<typename precision> class Vecteur<dense,precision>; // (1)
template<typename precision> struct rebind_vecteur_dense
{
typedef Vecteur<dense,precision> type;
};
template<typename precision> class Vecteur<dense,precision> : dense<precision>
{
public:
Vecteur fun1()
{
std::cout<<"1\n";
return Vecteur();
}
typedef typename rebind_vecteur_dense<precision>::type type1;
type1 fun2()
{
std::cout<<"2\n";
return type1();
}
typedef typename rebind_vecteur_dense<int>::type type2;
type2* fun3()
{
type2 t;
t.fun1();
t.fun2();
std::cout<<"3\n";
return 0;
}
// type2 fun4()
//{
// type2 t;
// t.fun1();
// t.fun2();
// std::cout<<"3\n";
// return 0;
//}
};
int main()
{
Vecteur<dense,double> toto;
toto.fun1();
toto.fun2();
toto.fun3();
Vecteur<dense,int> toto2;
toto2.fun1();
toto2.fun2();
toto2.fun3();
return 0;
} |
Partager