Cython C ++ и std :: map обработка - PullRequest
       7

Cython C ++ и std :: map обработка

0 голосов
/ 07 октября 2019

Я пытаюсь связать мой класс C ++ с Cython, но мне трудно передать его в качестве аргумента std :: map.

файл sample.pxd:

from libcpp cimport bool
from libcpp cimport string
from libcpp cimport map
from libcpp.utility cimport pair


cdef extern from "../SampleProg.h":
        cdef extern from "<map>" namespace "std":
            cdef cppclass SampleProg:
            SampleProg() except +

            void setInitialTemplateParameters(map[string,XdmValue*] parameters, bool tunnel)

            # Get all parameters as a std::map
            map[string,XdmValue*]& getParameters()

            # Get all properties as a std::map
            map[string,string]& getProperties()

файл sampleProg.pyx:

cimport sampleProg
from libcpp cimport bool
from libcpp cimport map
from libcpp.utility cimport pair
from libcpp cimport string

cdef class PySampleProg:

     def set_initial_template_parameters(self, bool tunnel, **kwds):

        cdef map[str, PyXdmValue ] parameters
        cdef bool c_tunnel
        c_tunnel = tunnel
        cdef PyXdmValue value_
        for key, value in kwds.items():
                if isinstance(value, PyXdmValue):
                        value_ = value
                        parameters[key] = value_.thisvptr

        if len(kwds) > 0:
            self.setInitialTemplateParameters(parameters, c_tunnel);

Кажется, я не могу найти примеры построения карты для передачи в C ++ в cython. Я получаю эту ошибку в файлах pxd и pyx:

void setInitialTemplateParameters (параметры map [string, XdmValue *], туннель bool)

^

sampleProg.pxd: 186: 46: «map» не является идентификатором типа

1 Ответ

2 голосов
/ 07 октября 2019

Это выглядит немного беспорядочно и, вероятно, немного от работы. Однако ваша ошибка «карта не является идентификатором типа» легко объяснима. Вы хотите:

from libcpp.map cimport map

(то есть from libcpp cimport map просто получает файл map.pxd, а не класс map C ++, определенный внутри). То же относится и к string.

...