我正在阅读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。)。其他人呢?
答案 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。