PythonとC++の間でクラスを共有することは、両方の言語の利点を活用する強力な方法です。Pythonの柔軟性とC++のパフォーマンスを組み合わせることで、より効率的なコードを書くことができます。

この記事では、pybind11というライブラリを使用して、C++で書かれたクラスをPythonから利用する方法を紹介します。

まず、C++でクラスを定義します。以下に、名前、身長、体重をメンバ変数に持つPersonクラスの例を示します。

#ifndef PERSON_H
#define PERSON_H
#include <string>

class Person {
public:
    Person();
    Person(const std::string &name, const int &height, const int &weight);
    void SetName(const std::string &name);
    std::string GetName() const;
    void SetHeight(const int &height);
    int GetHeight() const;
    void SetWeight(const int &weight);
    int GetWeight() const;
    double GetBmi() const;

private:
    std::string mName;
    int mHeight;
    int mWeight;
};

#endif

次に、pybind11を使用して、このクラスをPythonから利用できるようにラップします。

#include "person.h"
#include <pybind11/pybind11.h>

namespace py = pybind11;

PYBIND11_MODULE(person, p) {
    py::class_<Person>(p, "Person")
        .def(py::init<std::string, int, int>())
        .def_property("name", &Person::GetName, &Person::SetName)
        .def_property("height", &Person::GetHeight, &Person::SetHeight)
        .def_property("weight", &Person::GetWeight, &Person::SetWeight)
        .def("get_bmi", &Person::GetBmi)
        .def("__repr__", [](const Person &p) {
            return "Person('" + p.GetName() + "', " + std::to_string(p.GetHeight()) + ", " + std::to_string(p.GetWeight()) + ")";
        });
}

これで、PythonからC++のPersonクラスを直接使用することができます。この方法を使用すれば、PythonとC++の間でシームレスにデータを共有し、各言語の長所を最大限に活用することが可能になります。

この記事がPythonとC++のクラスの連携についての理解を深める一助となれば幸いです。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です