4

我有两个 c++ 对象

    int queueIndex
    Timer timer_obj

这是计时器类的定义

class Timer
{

private:
    struct timeval tStart; /**< @brief Stores the system time when the timer is started */
    struct timeval tFinish; /**< @brief Stores the system time when the timer is stopped */

protected:
    float getElapsedTime(struct timeval, struct timeval);

public:
    Timer();
    string currentTime();
    float currentElapsedTime();
    void restart();
    float stop();
    int high_pres_usleep_untill(unsigned long long int);
    string getStringStartTimer();
    void setStartTimerFromString(string);
    void sleep(long int);
    unsigned long long int get_clock();

我需要将这两个对象转换为 PyObj*。我为此目的使用了 boost::python。我现在希望在没有 boost 或 swig 的情况下做到这一点。我成功转换了索引,但我对 timer_obj 毫无头绪

    PyObject* pyo=PyInt_FromLong(queueIndex)

如果有人可以帮助我,我将不胜感激。我只需要一个示例,您不需要给我完整的代码。而且类中定义的函数有点复杂,所以我没有在这里给出。是否可以转换 timer_obj 然后分配一个新的引用,还是我必须为类中的所有结构和函数获取新的引用并使用这些引用创建一个新类?

4

2 回答 2

2

您需要做的是创建一个扩展类型。不幸的是,这个过程相对复杂,需要几百行代码。这就是 boost::python 和 SWIG 的整个 python,用于删除所有样板。

于 2012-12-13T22:34:21.733 回答
1

正如 Nathan 所说,扩展类型是相对复杂的。您想为此探索 Cython,因为语法更简单,并且它负责在内部生成样板。http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html

您还可以查看 Niklas 在https://stackoverflow.com/a/8933819/2156678中发布的示例

于 2013-03-20T12:38:22.010 回答