2017-08-21 1 views
-2

Est-il possible d'importer le std :: find, dans le libcpp.algorithm je n'y trouve qu'une quantité très limitée de fonctions. Maintenant, je dois faire une boucle à travers le vecteur et comparer.est-il possible d'importer le fichier std :: find find_if, etc dans Cython?

+1

Que voulez-vous dire _import_? N'est-il pas suffisant de '#include '? – user0042

+0

Pouvez-vous s'il vous plaît poster votre code? –

+1

@ user0042 Cython expose une partie de la bibliothèque standard C++ à un langage de type Python, ce qui permet d'interfacer C++ et Python. Il ne cherche pas à exposer '' particulièrement particulièrement bien, d'où la question. – DavidW

Répondre

3

Vous avez juste besoin de suivre le schéma utilisé pour envelopper les autres fonctions libcpp.algorithm:

cdef extern from "<algorithm>" namespace "std": 
    Iter find_if[Iter, Func](Iter first, Iter last, Func pred) 

from libcpp.vector cimport vector 
from libcpp cimport bool 

cdef bool findtwo(int a): 
    if a==2: 
     return True 


def test(): 
    cdef vector[int] v = [1,2,3,4,2] 
    cdef vector[int].iterator found = find_if(v.begin(), v.end(), findtwo) 
    if found != v.end(): 
     print("Found") 

Vous trouverez la grande limitation est ce que vous pouvez passer à la fonction sous-jacente: il doit être Sachez également que tout objet Python que vous renvoyez sera interprété comme true (c'est-à-dire qu'il ne s'agit pas d'un nullptr). Assurez-vous donc de renvoyer un booléen C++ comme je l'ai montré.