gpt4 book ai didi

c++ - 具有某些公共(public)成员的强制转换结构

转载 作者:行者123 更新时间:2023-12-04 11:51:07 25 4
gpt4 key购买 nike

假设我有 2 struct s:

typedef struct
{
uint8_t useThis;
uint8_t u8Byte2;
uint8_t u8Byte3;
uint8_t u8Byte4;
} tstr1
typedef struct
{
uint8_t u8Byte1;
uint8_t u8Byte2;
uint8_t useThis;
} tstr2
我会 只有需要 useThis函数内的成员,但在某些情况下,我需要强制转换一个或另一个结构:
void someFunction()
{
someStuff();
SOMETHING MyInstance;
if(someVariable)
{
MyInstance = reinterpret_cast<tstr1*>(INFO_FROM_HARDWARE); //This line of course doesn't work
}
else
{
MyInstance = reinterpret_cast<tstr2*>(INFO_FROM_HARDWARE); //This line of course doesn't work
}
MyInstance->useThis; //Calling this memeber with no problem

moreStuff();
}
  • 所以我想用 useThis不管 Actor 做了什么。如何才能做到这一点?
  • 我想避免someFunction()成为模板(只是为了避免 this kind of things )
  • 注意像 this 这样的问题有一种类似的问题,但结构成员具有相同的顺序

  • 编辑:
    在 RealLife 中,这些结构要大得多,并且有几个“同名”成员。直接类型转换一个 uint8_treinterpret_cast<tstr1*>(INFO_FROM_HARDWARE)->useThis会很乏味,需要几个 reinterpret_cast s(虽然这是我在此编辑之前的问题的有效解决方案)。这就是为什么我坚持 MyInstance正在“完成”。

    最佳答案

    这是模板的用途:

    template<class tstr>
    std::uint8_t
    do_something(std::uint8_t* INFO_FROM_HARDWARE)
    {
    tstr MyInstance;
    std::memcpy(&MyInstance, INFO_FROM_HARDWARE, sizeof MyInstance);
    MyInstance.useThis; //Calling this memeber with no problem
    // access MyInstance within the template
    }

    // usage
    if(someVariable)
    {
    do_something<tstr1>(INFO_FROM_HARDWARE);
    }
    else
    {
    do_something<tstr2>(INFO_FROM_HARDWARE);
    }

    I want to avoid someFunction() to be template (just to avoid this kind of things)

    Why can’t I separate the definition of my templates class from its declaration and put it inside a .cpp file?



    链接的问题对您的用例来说不是问题,因为潜在的模板参数集是一个有限集。下一个常见问题 entry解释如何: 使用模板的显式实例化。

    关于c++ - 具有某些公共(public)成员的强制转换结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68116228/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com