cuốn sách gpt4 ai đã làm

boost-python: Làm cách nào để cung cấp hàm bao bọc hàm tạo tùy chỉnh?

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 15:52:06 26 4
mua khóa gpt4 Nike

Tôi đang sử dụng boost-python cho một chương trình có tên Lớp Cpp Lớp C++ để tạo liên kết python. Nếu cần, tôi có thể định tuyến cuộc gọi đến hàm thành viên "bình thường" (ví dụ: trích xuất các loại C++ từ python args) thông qua một hàm bao bọc nhỏ xử lý trước các đối số, như sau:

lớpCppLớp
{
public:
CppClass(Thông số đặc biệt p);
void doSomething(int x, float y);
};

sử dụng không gian tên boost::python; // Để trích xuất, tuple, init, class_, v.v.

classWrapperFuncs
{
public:
static void doSomething(CppClass & c, tuple t)
{
// Trích xuất đặc biệt: Chuyển đổi python arg (một tuple) thành C++ args.
int x = extract(t.attr("__getitem__")(0));
float y = extract(t.attr("__getitem__")(1));
c.doSomething(x,y);
}
};

class_ >
("CppClass", init<đặc biệt="">())
.def("doSomething", &WrapperFuncs::doSomething, (arg("t")))

Nhưng làm sao tôi có thể Lớp Cpp Người xây dựng Còn việc làm điều tương tự thì sao?

câu trả lời hay nhất

sử dụng không_init gót chân .def 用于 __init__ sử dụng boost::python::make_constructor() .

classWrapperFuncs
{
public:
tăng tĩnh::shared_ptr initWrapper( object const & p )
{
SpecialParameters sp = ... // thực hiện trích xuất phức tạp ở đây.
return boost::shared_ptr( CppClass(sp) mới);
}

static void doSomething(CppClass & c, tuple t) { /*...*/ }
};

class_ >
("CppClass", no_init)
.def("__init__", make_constructor(&WrapperFuncs::initWrapper))
.def("doSomething", &WrapperFuncs::doSomething, (arg("t")))

Phần này Wiki python giải thích cách thực hiện việc này, nhưng nó không hiệu quả với tôi vì nó không đề cập đến không_init. Trong trường hợp của tôi,không_init được yêu cầu.

boost-python: Làm cách nào để cung cấp hàm bao bọc hàm tạo tùy chỉnh? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/18793952/

26 4 0
Hồ Xil
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress