Arf désolé pour le reatrd, je bosse avec GCC 3.1 sous project Builder (MAC OS X).
En fait pour simplifier mon code ressemble à :
Code :
- template<class T>
- class Evaluable
- {
- public :
- typedef typename SIMDType<T>::element arg;
- virtual arg eval( const arg& val ) = 0;
- };
- template<class T,class E>
- class EXpression : public Evaluable<T>
- {
- public :
- Expression( const E& xpr ) : _xpr(xpr) {}
-
- virtual arg eval( const arg& val)
- {
- // le type E fournit eval()
- return _xpr.eval(val);
- }
-
- private :
- E _xpr;
- };
- template<class T>
- class ExprHolder
- {
- public :
- typedef typename SIMDType<T>::element arg;
- template<class E>
- operator=( const Expression<T,E>& xpr )
- {
- my_expr = &xpr;
- }
- arg operator()( const arg& val )
- {
- return my_expr->eval(arg);
- }
- private :
- Evaluable<T>* my_expr;
- }
|
j'espere etre clir c pas gagné.
Le but etant de fournir une class (ici ExprHolder) à laquelle je puisse
affecté une instance de Expression<T,E> sacahant que le type E est trés complexe et inconnu de l'utilisateur.
j'ai une tripotée d'opérateurs surchargée (+,-,/,*) qui construisent un objet Expression<T,E> a partir d'une ecriture du style x+2*ln(x) (expression template en fait).
Du style :
Variable<double> x,y;
ExprHolder<double> f = ln(x);
ExprHolder<double> g = 2*x;
double r = f(g(4));
*** J'ai corrigé mes erreurs de recopies désolé Taz ***
Message édité par Joel F le 11-07-2003 à 14:41:06