在编写 C++ 模板函数时,我必须检查此函数使用的变量类型是否为整数。如果是这种情况,它应该会导致编译错误。
template <class IT> void foo( IT first, IT last ) {
// check here that *first has integral type.
}
我遇到的麻烦是,这个函数模板参数不是直接使用的类型,而是迭代器类型。
不幸的是,我目前处于一个无法使用 C++11 或 Boost 的环境中,因此我将不得不尝试自己重新发明这个轮子。
我最终通过使用参数数组大小定义指向数组的指针来测试该类型是否是整数。如果参数类型是非整数,这会产生编译错误。
template <class IT> void foo( IT first, IT last ) {
int ( * fake_array_ptr )[*first]; // Error: size of array has non-integral type
}
我的问题是:还有其他更明确的方法来测试一个类型是否是整数?