2011-05-28 5 views
1

J'ai templated functionconnect:fonction de modèle d'exportation

template<class InstanceClass> 
CL_Slot connect (InstanceClass *instance, void(InstanceClass::*function)(Param1, Param2)) 

Il se connecte pour certains signaux transmis de fonction InstanceClass.

Dans mon exemple, je souhaite connecter certaines classes pour l'événement de clavier (KeyDown). En C++ j'écrire:

get_signal_object().connect(&SomeClass::func); 

Mais je dois utiliser cette fonction en python-script avec l'exportation de C++ code (en utilisant Boost.Python). Comme je le sais, pour exporter le modèle je dois l'exporter en passant tout type utilisé. Mais en python, je vais passer des classes qui existent uniquement dans l'espace de noms python.

Alors, des idées comment utiliser cette fonction modélisée en python?

Répondre

1

Pourquoi ne pas vous venez d'ajouter

extern template<> 
    CL_Slot connect<SomeClass> (SomeClass *instance, void(InstanceClass::*function)(Param1, Param2)); 

Note: extern pourrait devoir après template<> - ne me souviens pas

Si vous devez avoir une liaison C ajouter une fonction d'enveloppe (il va inline la fonction gabarit).


Note: MSVC a nonstandard template export facilities

C++ 0x a un support pour les modèles à venir externat: http://en.wikipedia.org/wiki/C%2B%2B0x#Extern_template

+0

Tu ne comprenais pas. Regardez: Je ne connais pas les types que je vais passer dans cette fonction de C++! Donc, je ne sais pas comment l'intégrer parce que je n'ai pas de types. – Ockonal

+0

extern est supprimé de C++ 0x –

+0

Peut-être que j'ai compris, mais répondu plus général que vous ne le pensez est '_correct_'. Ce que vous avez besoin alors, était dans la deuxième partie de la réponse. Je ne suis pas sûr que boost.python le supporte déjà – sehe