Mam kilka klas i interfejsów API napisany w C++ i narażonych na Pythonie z pomocą Boost.PythonPythona do C++ funkcja konwersji przy użyciu Boost.Python
Jestem obecnie badającej możliwości tworzenia następujące architektury.
W python:
from boostPythonModule import *
AddFunction(boostPythonObject.Method1, args)
AddFunction(boostPythonObject.Method2, args)
AddFunction(boostPythonObject.Method2, args)
RunAll() # running is done by C++
W 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
}
Zasadniczo staram się umieścić wszystkie funkcje do rodzimej część mojego programu. Chodzi o to, że nie jestem pewien, czy możliwe jest wyodrębnienie wszystkich wymaganych danych z Boost metainfo, aby zrobić to w sposób ogólny - podczas kompilacji nie powinienem wiedzieć, jakie funkcje mam wywoływać i jakie argumenty akceptują.
Kilka pytań:
1. Czy istnieją udostępnione tabele informacji w języku Python, do których mogę uzyskać dostęp w celu sprawdzenia niektórych z tych rzeczy?
2. Boost.Python wykonuje sprawdzanie argumentów typu. Czy można go ponownie wykorzystać osobno?
Daj mi znać swoje myśli.
Dzięki
Naprawdę trzeba sprawdzić wszystkie typy w 'AddFunction()'? Czy nie wystarczy po prostu przechowywać metodę i argumenty gdzieś i wywołać te metody w 'RunAll()' W ten sposób otrzymasz błąd związany z typem, który wystąpi podczas wykonywania metod, a Boost.Python zrobi to za ciebie . – Arlaharen
Cóż, nie. Zasadniczo chodzi o zminimalizowanie luki czasowej między tymi wywołaniami funkcji, stąd wszystkie argumenty muszą zostać sprawdzone wcześniej. RuAll powinien wiedzieć tylko o wskaźnikach funkcyjnych C++ (np. Funktorach), Jakieś inne porady? – Alex
W tym przypadku nie mam żadnego. :-) Nie sądzę, że jest to przypadek użycia, dla którego został zaprojektowany Boost.Python i że będzie ci ciężko go zgiąć, żeby zrobić to, co chcesz. Czy czas spędzony w Pythonie między wezwaniami do twoich metod jest tak znaczący, że musisz to zrobić? Ale myślę, że zrobiłeś swoje profilowanie ... :-) – Arlaharen