在编译时将数组指针转换为void *

时间:2013-05-07 21:48:03

标签: c++ templates casting

我有这段代码:

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&lt;&gt;,但在编译时遇到了另一个关于非整数运算的错误。有没有办法在编译时将指向已知类型的指针转​​换为void指针?

0 个答案:

没有答案