Pokusavam da napravim klasu koja koristi policy based dizajn pomocu templates. 'Host' klasa je AnimationController koja koristi policies za advance animacije. Drugim recima, u policy klase smestam logiku za increment current frejma animacije dok AnimationController vodi evidenciju o ellapsed time, duration itd.
Evo dela trenutnog koda:
Kapiram beneficije koriscenja template template parameters.
Ono sto ne razumem je kako da napisem template za AnimationController ako u policy klasu dodam jos jedan template parametar:
Kako sada prilagoditi template parametre za AnimationController?
U smislu:
ali to ne radi...
Takodje, sta bi se desilo da to radi, onda bih instanciranje objekta morao da napisem ovako:
AnimationController<int, LinearAdvancePolicy<int, true> > m_animController;
Ovim koriscenje template template parameters gubi smisao posto explicitno navodim da je prvi parametar za LinearAdvancePolicy int....
Mozda je ovo i nemoguce implementirati ili mogu promeniti dizajn (da stavim bReversed u AnimationController) ali je glavno pitanje kako 'ubaciti' vise parametara u policy klasu kada host klasa ocekuje da policy primi preko template template parametra?
Evo dela trenutnog koda:
Code:
template <typename T>
class LinearAdvancePolicy
{
public:
static bool advance(T& currentValue, const T& start, const T& end, float duration,
float elapsedTime)
{
float pos = elapsedTime / duration;
currentValue = (T)(start + (end - start)*pos);
return currentValue >= end;
}
};
template <typename ValueType,
template <typename> class AdvancePolicy = LinearAdvancePolicy >
class AnimationController
{
.....
void update(float dt)
{
bool bIsFinished = AdvancePolicy<ValueType>::advance(...);
....
}
};
template <typename T>
class LinearAdvancePolicy
{
public:
static bool advance(T& currentValue, const T& start, const T& end, float duration,
float elapsedTime)
{
float pos = elapsedTime / duration;
currentValue = (T)(start + (end - start)*pos);
return currentValue >= end;
}
};
template <typename ValueType,
template <typename> class AdvancePolicy = LinearAdvancePolicy >
class AnimationController
{
.....
void update(float dt)
{
bool bIsFinished = AdvancePolicy<ValueType>::advance(...);
....
}
};
Kapiram beneficije koriscenja template template parameters.
Ono sto ne razumem je kako da napisem template za AnimationController ako u policy klasu dodam jos jedan template parametar:
Code:
// namera je da u policy dodam parametar koji odredjuje da li je animacija reversed
template <typename T, bool bReversed>
class LinearAdvancePolicy { ... }
// namera je da u policy dodam parametar koji odredjuje da li je animacija reversed
template <typename T, bool bReversed>
class LinearAdvancePolicy { ... }
Kako sada prilagoditi template parametre za AnimationController?
U smislu:
Code:
template <typename ValueType,
template <typename, bool> class AdvancePolicy = LinearAdvancePolicy >
class AnimationController {...}
template <typename ValueType,
template <typename, bool> class AdvancePolicy = LinearAdvancePolicy >
class AnimationController {...}
ali to ne radi...
Takodje, sta bi se desilo da to radi, onda bih instanciranje objekta morao da napisem ovako:
AnimationController<int, LinearAdvancePolicy<int, true> > m_animController;
Ovim koriscenje template template parameters gubi smisao posto explicitno navodim da je prvi parametar za LinearAdvancePolicy int....
Mozda je ovo i nemoguce implementirati ili mogu promeniti dizajn (da stavim bReversed u AnimationController) ali je glavno pitanje kako 'ubaciti' vise parametara u policy klasu kada host klasa ocekuje da policy primi preko template template parametra?
Potpis
EOF