char(*)[int]在C ++中的含义是什么?

时间:2015-03-11 12:50:55

标签: c++ templates sfinae

我正在阅读this article on SFINAE,我找到了这对有趣的功能:

template<int I> void div(char(*)[I % 2 == 0] = 0) {
    // this overload is selected when I is even
}
template<int I> void div(char(*)[I % 2 == 1] = 0) {
    // this overload is selected  when I is odd
}

这很有效(g ++ - 4.9),但我不太了解参数的类型(char(*)[int] -part。)。其他人呢?

2 个答案:

答案 0 :(得分:7)

char(*)[I % 2 == 0]表示指向char数组的指针,其维度为I % 2 == 0 。有一个指向维0数组的指针是违法的,SFINAE说这会导致不考虑模板(而不是发生编译错误)。

答案 1 :(得分:6)

char(*)[I % 2 == 1]是指向I % 2 == 1 char数组的指针的类型。您可以使用cdecl来解决这些问题。另请参阅spiral rule