0

我有这个代码:

template <const void*, class Type, size_t Size>
Type GetNextElementImpl(const Type (&Array)[Size])
{
    static int index = -1;
    index = (index + 1) % Size;
    return Array[index];
}

由于它在代码库周围的多个地方使用,因此该函数需要为每个与它一起使用的数组具有唯一索引。const void* 存在于模板参数中,以便为每次使用进行唯一的实例化。常规用法是这样的:

int TestArray1[] = {0, 1, 2, 3, 4 };
int TestArray2[] = {10, 20, 30, 40, 50 };
int item1 = GetNextElementImpl<TestArray1>(TestArray1); // item is 0
int item2 = GetNextElementImpl<TestArray2>(TestArray2); // item is 10, not 20

使用宏使使用更好:

#define GetNextElement(StaticArray) GetNextElementImpl<StaticArray>(StaticArray)
int item = GetNextElement(TestArray);

在 MSVC 中工作正常,但 GCC 似乎在将静态数组类型转换为 const void 指针时遇到问题。我尝试了 reinterpret_cast<>,但在编译时遇到了另一个关于非整数操作的错误。有没有办法在编译时将指向已知类型的指针转​​换为 void 指针?

4

0 回答 0