gpt4 book ai didi

c++ - 防止 C 样式数组指针的向上转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:44 26 4
gpt4 key购买 nike

struct Entry
{
int Data0;
};

struct ExtendedEntry : public Entry
{
int Data1;
};

我有一个简单的方法,需要一个像这样的 C 风格数组指针指向 Entry

void Calculate(Entry* data, int count);

当将指针传递给 ExtendedEntry 数组时,此方法显然失败了。如何防止用户这样做?

ExtendedEntry items[50];
// [...]
Calculate(items, 50);

我并不是追求刀枪不入的API,我只是想防止我和我的同事再次犯同样的错误。

最佳答案

制作一个简单的包装器:

template <typename TEntry>
void CalculateSafe(TEntry* data, int count)
{
static_assert(sizeof(TEntry) == sizeof(Entry), "size mismatch");
Calculate(data, count);
}

这允许传递任何派生类型,只要它具有相同的大小,这将解决您在 C API 需要在数组中进行指针运算时遇到的问题。

关于c++ - 防止 C 样式数组指针的向上转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46469517/

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