Передача вектора в качестве аргумента функции python с использованием boost python - PullRequest
0 голосов
/ 30 апреля 2020

Я следовал https://riptutorial.com/boost/example/25280/wrapping-std--vector-in-boost-python но как включить vector_indexing_suite для передачи вектора в качестве аргумента? Я получаю сообщение об ошибке: Нет класса Python, зарегистрированного для класса C ++ std :: vector> при выполнении кода:

BOOST_PYTHON_MODULE(Strat)
{
    bp::class_<std::vector<long> >("Long_vec")
        .def(bp::vector_indexing_suite<std::vector<long> >())
    ;


    bp::class_<PyStrat, boost::noncopyable>("Strat")
        .def("gen_fibonacci", &Strat::gen_fibonacci)
        ;
}
int main() {
    try
    {
        Py_Initialize();
        // register the python module we created, so our script can import it
        PyImport_AppendInittab("Strat",&initStrat);
        //PyImport_AppendInittab("StrategyFramework", &initStrategyFramework);

        // import the __main__ module and obtain the globals dict
        bp::object main     = bp::import("__main__");
        bp::object globals  = main.attr("__dict__");

        // import our strategy.py file
        bp::object module   = import("Strat", "./python_plugins/strat1.py", globals);

        // obtain the strategy class and instantiate one
        bp::object Strategy = module.attr("Strategy");
        bp::object strategy = Strategy();
        std::cout<<"not here";

        Helper a;
        strategy.attr("gen_fibonacci")(boost::ref(a.v),1,100);
        long ans=a.sum_series(a.v);
        std::cout<<"done";
        return 0;
    }
    catch(const bp::error_already_set&)
    {
        std::cerr << ">>> Error! Uncaught exception:\n";
        PyErr_Print();
        return 1;
    }
}

что я делаю не так?

strat1.py:

    from Strat import *

    class Strategy:
        def gen_fibonacci(self,l,ind,n):
            num = 3
            t1 = 0 
            t2 = 1
            nextTerm = 0
            i=1
            if ind==1:
                l.append(0)
                l.append(1)
                i=3
            if ind==2:
                l.append(1)
                i=2
            while i<n:
                nextTerm=t1+t2
                t1=t2
                t2=nextTerm
                if num>=ind:
                    i=i+1
                    l.append(nextTerm)
                num=num+1
            return 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...