Эффективный двунаправленный поиск DRY как в Python, так и в C++.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Эффективный двунаправленный поиск DRY как в Python, так и в C++.

Сообщение Anonymous »

В нашем рабочем процессе у нас есть несколько таблиц сопоставлений целочисленных идентификаторов строковых имен (например, коды состояния/ошибки, идентификаторы оборудования и т. д.). Мы пытаемся найти лучший способ написать библиотеку двунаправленного поиска для этих значений как на C++, так и на Python.
Интерфейсы могут выглядеть так:

Код: Выделить всё

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++ (вероятно, с помощью некоторых макросов препроцессора).
Никто из нашей команды не имеет опыта создания привязок Python для функций C или наоборот, поэтому мы хотели бы избежать этого пути, если это возможно. Но если это действительно лучший подход, мы будем признательны за предложения о том, как лучше всего это реализовать (swig, boost::python?).

Подробнее здесь: https://stackoverflow.com/questions/660 ... thon-and-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»