Интерфейсы могут выглядеть так:
Код: Выделить всё
namespace myproject{
namespace lookup{
typedef long ID_t;
enum class STATUSCODE :ID_t {OK=0, ERROR=1, UNKNOWN=-1};
std::string GetStatusDescription(ID_t statuscode);
ID_t GetStatusCode(const std::string& statusdesc);
enum class DEVICELABEL :ID_t {SuperThing_v1=0x234, LessSuperThing_v12=0x12};
std::string GetDeviceLabel(ID_t hardwareid);
ID_t GetHardwareID(const std::string& devicelabel);
}
}
Код: Выделить всё
#file myproject/lookup.py
class STATUSCODE(Enum):
OK=0
ERROR=1
UNKNOWN=-1
def GetStatusDescription(statuscode: int) -> str:
pass
def GetStatusCode(statusdesc: str) -> int:
pass
class DEVICELABEL(Enum):
SuperThing_v1=0x234
LessSuperThing_v12=0x12
def GetDeviceLabel(hardwareid: int) -> str:
pass
def GetHardwareID(devicelabel: str) -> int:
pass
- Фактические таблицы находятся в одном файле (или в одном файле на таблицу, но не повторяются, как перечисления в приведенном выше примере).
- Обеспечивает эффективный двунаправленный поиск с целочисленными, строковыми и перечислимыми входными данными. Например. класс Python Enum идеален. Что касается C++, я думаю, что мы все еще застряли в хитростях препроцессора для сопоставления строк enumstring. Интерфейс перечисления был бы удобен, но не обязателен.
- Интерфейс C++ должен читать таблицу во время компиляции, чтобы избежать необходимости искать файл данных.
Никто из нашей команды не имеет опыта создания привязок Python для функций C или наоборот, поэтому мы хотели бы избежать этого пути, если это возможно. Но если это действительно лучший подход, мы будем признательны за предложения о том, как лучше всего это реализовать (swig, boost::python?).
Подробнее здесь: https://stackoverflow.com/questions/660 ... thon-and-c
Мобильная версия