Bonjour,

dans le cadre d'un petit outil pour le binding Js <=> C++, je voudrais �crire une fonction template pour convertir diff�rents types natif depuis et vers JS.

J'ai donc un template par d�faut d�fini comme suit (1):
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
 
template<typename TYPE>
TYPE JsToNative(JsObj object) {
	throw new Exception("unhandled JsToNative conversion.");
}
Je sp�cialise ensuite ce template pour diff�rents types de base (int, string, ...). Les param�tres d'entr�es restent identique (JsObj) ; seul celui de retou diff�re. Par exemple (2):
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
 
template<>
std::string JsToNative(JsObj object) {
    if (object.isJsString())
        return std::string(object.toString());
    else
        throw new Exception("bad JsToNative conversion: JS object is not a string.");
}
Mon probl�me est que je voudrais maintenant d�finir une sp�cialisation 'g�n�rique' qui s'applique pour tout TYPE qui soit un pointeur vers une instance de classe. Quelque chose comme (3):
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
 
template<>
TYPE* JsToNative(JsObj object) {
    if (object->isJsObject()) {
        TYPE* ptr = dynamic_cast<TYPE*>( object->getBoundDataPointer() );
        if (ptr) 
            return ptr;
    }
    throw new Exception("bad JsToNative conversion: JS object is not bound to a native instance.");
}
Probl�me: cette derni�re impl�mentation (et les autres variantes test�es) ne fonctionnent pas quand j'essaie de lui passer un pointeur ( JsToNative<MonType*>(myJsObj) ) : soit le compilo essaie d'utiliser (1) � la place de (3), soit j'ai un "call of overloaded template function is ambiguous".

Une id�e ?

Merci d'avance