struct Entry
{
int Data0;
};
struct ExtendedEntry : public Entry
{
int Data1;
};
Run Code Online (Sandbox Code Playgroud)
我有一个简单的方法,期望像这样的C样式数组指针
void Calculate(Entry* data, int count);
Run Code Online (Sandbox Code Playgroud)
将指针传递给ExtendedEntrys数组时,此方法显然失败.如何防止用户这样做?
ExtendedEntry items[50];
// [...]
Calculate(items, 50);
Run Code Online (Sandbox Code Playgroud)
这不是我追求防弹API,我只是想阻止我和我的同事再次犯同样的错误.
制作一个简单的包装:
template <typename TEntry>
void CalculateSafe(TEntry* data, int count)
{
static_assert(sizeof(TEntry) == sizeof(Entry), "size mismatch");
Calculate(data, count);
}
Run Code Online (Sandbox Code Playgroud)
这样就可以传递任何派生类型,只要它具有相同的大小,这将解决当C API需要在数组中进行指针运算时遇到的问题.