У меня есть структура, которая выглядит следующим образом:
/// Enumeration describing register data types.
typedef enum RegDataType
{
RegDataType_Unknown = 0x0, ///< Unknown register data type.
RegDataType_ImmMultiData = 0x1, ///< Register data type is consecutive register values from a single offset.
RegDataType_ImmMultiPairs = 0x2, ///< Register data type is register offset and value pairs.
RegDataType_IndirectData = 0x3, ///< Register data type is consecutive register values from a single offset at
/// a specified address.
RegDataType_IndirectPairs = 0x4, ///< Register data type is register offset and value pairs at a specified
/// address.
} RegDataType;
/// Structure representing a register data pair of offset and value.
typedef struct PktRegDataPair
{
uint32_t offset; ///< The register offset.
uint32_t value; ///< The register value.
} PktRegDataPair;
/// Structure representing different types of register data that can be found within a packet.
typedef struct PktRegData
{
RegDataType type; ///< Register data type.
uint32_t numRegs; ///< The number of register represented.
union
{
struct
{
uint32_t regOffset; ///< Starting register offset.
const uint32_t* pData; ///< Pointer to consecutive register values.
} immMultiData;
struct
{
const PktRegDataPair* pData; ///< Pointer to register pairs of offsets/values.
} immMultiPairs;
struct
{
uint64_t address; ///< Address of consecutive register values/pairs of offsets/values.
uint32_t addrOffset; ///< Offset to an existing address. Valid only if address above is zero.
struct
{
uint32_t regOffset; ///< Starting register offset.
} data;
} indirect;
};
} PktRegData;
Я хотел бы обернуть это в pybind11 таким образом, чтобы при возврате структуры в Python присутствовали только действительные переменные-члены. Точно так же при загрузке из Python мне нужно перевести его в структуру PktRegData.
Я не знаю, как лучше всего это сделать в pybind11. Я видел документацию по кастерам пользовательского типа и хуки полиморфного типа, но я не уверен, что это лучше всего подходит для моего случая использования.
Спасибо за помощь!