You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于编译期反射实现结构体元素到不同向量元素的映射

编译期数据结构映射问题

我近期遇到技术瓶颈,找不到优雅的解决方案处理以下问题:

我有多个元素数量不同的数据结构,所有元素均按指针大小对齐且不大于指针,例如:

struct DATA_0{
    size_t      Value;
    size_t      *PtrValue;
    bool        BoolValue;
};

或

struct DATA_1{
    size_t      Value0;
    size_t      Value1;
    size_t      *PtrValue;
    void        *PtrBuffer;
    bool        BoolValue;
    const char  *StringBuffer;
};

输入数据结构定义如下:

struct INPUT{
    size_t *DataBuffer;
    size_t DataVector[16];
};

我需要在编译期将这些数据结构映射到DataBuffer或DataVector的不同元素中,具体要求:

  • 映射规则由#define/编译期开关控制,同一编译配置下所有结构的映射规则一致;
  • 结构体成员可映射至DataBuffer或DataVector;
  • 结构体成员的索引(因数据对齐无需偏移)决定其映射目标,例如索引0的元素(如DATA_0::Value或DATA_1::Value0)在某些配置下映射到DataVector[3],其他配置下映射到DataBuffer[0];
  • 无索引映射规则的元素(通常为结构体前2-4个元素)需从DataBuffer的指定元素开始依次映射;

期望用法示例:

INPUT *input;

data_mapping<DATA_0> mapping_0(input);
// 部分场景从input->DataVector[0]取值,其他场景从input->DataBuffer[0]取值
size_t tmpValue = mapping_0[Value];

data_mapping<DATA_1> mapping_1(input);
// 部分场景从input->DataVector[1]取值,其他场景从input->DataBuffer[3]取值
size_t tmpPtrBuffer = mapping_1[PtrBuffer];

注:数据不一定以结构体形式存在,也可使用可变参数模板,例如:<size_t, Value, size_t, PtrValue, bool, BoolValue>

以下是我期望实现的伪代码示例:

template<class TMember, class TData>
TMember GetElement(INPUT *Input, TData Data)
{
#ifdef FIRST_CASE
    if(indexof(TMember) == 0)
    {
        return Input->DataVector[0];
    }
    if(indexof(TMember) == 1)
    {
        return Input->DataVector[1];
    }
    return Input->DataBuffer[indexof(TMember) - 2];
#else
    if(indexof(TMember) == 0)
    {
        return Input->DataVector[2];
    }
    if(indexof(TMember) == 1)
    {
        return Input->DataVector[3];
    }
    if(indexof(TMember) == 2)
    {
        return Input->DataVector[4];
    }
    if(indexof(TMember) == 3)
    {
        return Input->DataVector[5];
    }
    return Input->DataBuffer[indexof(TMember)];
#endif
}

size_t tmpValue = GetElement<Value>(input,DATA_0);
size_t tmpPtrBuffer = GetElement<PtrBuffer>(input,DATA_1);

内容的提问来源于stack exchange,提问作者user2281752

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:58:26