template et conversion implicite
Bonjour,
un petit souci avec les conversions implicites. J'ai un operator du type :
Code:
1 2 3 4 5
|
template <class E1, class E2>
untype<E1, E2> operator+(const hybrid_expression<E1>& e1, const scalar_expression<E2>& e2) {
//...
} |
Avec scalar_expression une classe contenant un constructeur de conversion :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
template <class E>
class scalar_expression
{
public:
scalar_expression(const E& e) : m_e(e) {}
private:
const E& m_e;
}; |
Mais quand je fais l'appel :
Avec V1 et V2 des types dérivants de hybrid_expression, le compilo ne trouve pas d'oérateur adéquat. Ca passe uniquement si je fais un opérateur du type :
Code:
1 2 3 4 5
|
template <class E>
un_type<E, int> operator+(const hybrid_expression<E>& e1, const int& e2) {
//...
} |
Apparemment le fait que l'argument de l'opérateur soit un template empêche la résolution de type. J'ai essayé également de passer par une classe de traits spécialisée du style :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
template <class E>
class scalar_traits;
template <>
class scalar_traits<int>
{
typedef int type;
}
template <class E1, class E2>
untype<E1, E2> operator+(const hybrid_expression<E1>& e1, const typename scalar_traits<E2>::type& e2) {
//...
} |
Même problème. Quelqu'un aurait une idée ?
Merci d'avance.