Boost Python Для std :: string не найден преобразователь to_python

Итак, я пытаюсь создать преобразователь to_python, который позволит мне возвращать boost :: optional из открытой функции и обрабатывать его как T, если параметр optional установлен, и None, если нет. Основываясь на сообщении, которое я нашел на C ++ Sig , я написал следующий код.

template
struct optional_ : private boost::noncopyable {
  struct conversion {
    static PyObject* convert(boost::optional const& value) {
      if (value) {
        return boost::python::to_python_value()(*value);
      }
      Py_INCREF(Py_None);
      return Py_None;
    }
  };
  explicit optional_() {
    boost::python::to_python_converter, conversion>();
  }
};

Насколько я могу судить, он работает для преобразования дополнительных параметров, но python выдает следующее исключение «TypeError: Не найден преобразователь to_python (по значению) для типа C ++: std :: string ". Я знаю, что C ++ может преобразовывать строки в python, поскольку большинство моих открытых функций возвращают строки. Почему boost :: python :: to_python_value не распознает это, и как я могу использовать любой конвертер, который у него есть?

Исправлено путем изменения следующего (на основе этой статьи ):

template
struct optional_ : private boost::noncopyable {
  struct conversion {
    static PyObject* convert(boost::optional const& value) {
      using namespace boost::python;
      return incref((value ? object(*value) : object()).ptr());
    }
  };
  explicit optional_() {
    boost::python::to_python_converter, conversion>();
  }
};

Сейчас просто сделать другую версию, чтобы она была чище и работала лучше.

17
задан DRayX 8 June 2011 в 20:39
поделиться