Boost Python Проблемы с отображением метода, возвращающего const-ref std :: string - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу вернуть член класса std :: string по константной ссылке:

struct S
{
    const std::string& getStr() const
    {
        return _str;
    }

private:
    std::string _str;
};

Поэтому я добавил отображение Boost Python для доступа к этому члену с помощью метода:

class_<S>("S")
        .def_readonly("str", &S::getStr);

Тем не менее, я получаю ошибку компилятора, когда Boost Python не может согласовать константную строку C ++ с Python строкой:

error: type 'const boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<const std::basic_string<char,
      std::char_traits<char>, std::allocator<char> > &>' does not provide a call operator
    return rc( (tc().*f)(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT)) );

Какой стандартный способ достижения этого?

Я пытался:

class_<S>("S")
            .def_readonly("str", &S::getStr, return_value_policy<copy_const_reference>());

, но он все равно не скомпилируется:

error: no matching member function for call to 'def_readonly'
...