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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
struct ptr1__
{
template <typename T, typename S>
struct ptr1_
{
typedef void (S::*ptr1)(T);
T parameter;
};
};
struct ptr2__
{
template <typename T, typename S>
struct ptr2_
{
typedef void (S::*ptr2)(T, bool);
T parameter;
};
};
class time_ptr // la classe qui contient tous les pointeurs de fonction associés à un certain temps : les fonctions sont exécutées lorsque ce temps est supérieur à un certain seuil
{
public:
template <typename T, typename S>
void add_element_ptr1(T type, S parameter, float time) //pour ajouter un pointeur de fonction de type 1 avec parametre
{
ptr1__::ptr1_<T,S> substitut;
substitut.parameter = parameter;
m_ptr1.push_back(substitut); //ça marche mais il faudrait trouver autre chose pour remplacer le substitut
m_time_wait_ptr1.push_back(time);
m_current_time_ptr1.push_back(0.f);
}
template <typename T, typename S>
void add_element_ptr2(T type, S parameter, float time)//pour ajouter un pointeur de fonction de type 2 avec parametre
{
ptr2__::ptr2_<T,S> substitut;
substitut.parameter = parameter;
m_ptr2.push_back(substitut); //ça marche mais il faudrait trouver autre chose pour remplacer le substitut
m_time_wait_ptr2.push_back(time);
m_current_time_ptr2.push_back(0.f);
}
void analyse_time(float time)
{
for(int i=0;i<m_ptr1.size();i++)
{
m_current_time_ptr1[i]+=time;
if(m_current_time_ptr1[i]>=m_time_wait_ptr1[i])
{
m_current_time_ptr1[i]-=m_time_wait_ptr1[i];
(*m_ptr1[i].ptr1_<????????????????????>.ptr1)(m_ptr1[i].ptr1_.parameter); //que mettre ici ? comment lancer la fonction avec le pointeur sans utiliser de template ?
}
}
for(int i=0;i<m_ptr2.size();i++)
{
m_current_time_ptr2[i]+=time;
if(m_current_time_ptr2[i]>=m_time_wait_ptr2[i])
{
m_current_time_ptr2[i]-=m_time_wait_ptr2[i];
(*m_ptr1[i].ptr2_<????????????????????>.ptr2)(m_ptr2[i].ptr2_.parameter, true); //que mettre ici ? comment lancer la fonction avec le pointeur sans utiliser de template ?
}
}
}
private:
std::vector<ptr1__> m_ptr1;
std::vector<float> m_time_wait_ptr1;
std::vector<float> m_current_time_ptr1;
std::vector<ptr2__> m_ptr2;
std::vector<float> m_time_wait_ptr2;
std::vector<float> m_current_time_ptr2;
}; |