tôi có một loạt các lớp học và các API viết bằng C++ và tiếp xúc với Python với sự giúp đỡ của Boost.PythonPython C++ chức năng chuyển đổi sử dụng Boost.Python
Tôi hiện đang điều tra khả năng của việc tạo ra các kiến trúc sau.
Trong python:
from boostPythonModule import *
AddFunction(boostPythonObject.Method1, args)
AddFunction(boostPythonObject.Method2, args)
AddFunction(boostPythonObject.Method2, args)
RunAll() # running is done by C++
Trong C++:
void AddFunction(boost::object method, boost::object args)
{
/// 1. Here i need to extract a real pointer to a function
/// 2. Make argument and type checking for a function under method
/// 3. Unpack all arguments to native types
/// 4. Store the pointer to a function somewhere in local storage
}
void RunAll()
{
/// 1. run all previously stored functions and arguments for them
}
Về cơ bản tôi đang cố gắng để đưa tất cả các chức năng xuống đến phần nguồn gốc của chương trình của tôi. Vấn đề là tôi không chắc liệu có thể trích xuất tất cả các dữ liệu cần thiết từ Boost metainfo để làm điều này theo cách chung - lúc biên dịch tôi không biết tôi sẽ gọi hàm nào và đối số nào họ chấp nhận.
Một số câu hỏi:
1. Có bảng thông tin Python được chia sẻ nào tôi có thể truy cập để kiểm tra một số nội dung này không?
2. Boost.Python thực hiện kiểm tra đối số. Nó có thể được tái sử dụng một cách riêng biệt?
Hãy cho tôi biết suy nghĩ của bạn.
Cảm ơn
Bạn có thực sự cần phải kiểm tra tất cả các loại trong 'AddFunction()'? Nó sẽ không đủ để lưu trữ phương thức và đối số ở đâu đó và gọi những phương thức đó trong 'RunAll()' Bằng cách đó bạn sẽ nhận được bất kỳ lỗi liên quan đến kiểu nào mà bạn gặp phải khi bạn thực hiện các phương thức và Boost.Python sẽ làm điều đó cho bạn . – Arlaharen
Ồ, không. Về cơ bản ý tưởng là để giảm thiểu khoảng cách thời gian giữa các cuộc gọi chức năng đó, do đó tất cả các đối số phải được kiểm tra trước đó. RuAll chỉ nên biết về các con trỏ hàm C++ (ví dụ: functors), Bất kỳ lời khuyên nào khác? – Alex
Trong trường hợp đó tôi không có. :-) Tôi không nghĩ rằng đây là một trường hợp sử dụng mà Boost.Python được thiết kế cho và bạn sẽ có một thời gian khó khăn để uốn cong nó để làm những gì bạn muốn. Là thời gian dành cho Python giữa các cuộc gọi đến các phương pháp của bạn thực sự rất quan trọng mà bạn phải làm điều này? Nhưng tôi đoán bạn đã thực hiện profiling của bạn ... :-) – Arlaharen