【发布时间】:2015-03-11 20:55:50
【问题描述】:
我想问一下使用 SFINAE 的函数重载。我定义了2个函数,其中一个应该在整数类型作为参数传递时使用,另一个应该在浮点作为参数传递时使用。下面是代码:
template <typename T, typename If<IsIntegral<T>::value,T>::Type = 0>
void function(T t) {
std::cout << "T is integral type" << std::endl;
}
template <typename T, typename If<IsReal<T>::value,T>::Type = 0>
void function(T t) {
std::cout << "T is real type" << std::endl;
}
这编译得很好。当我实例化函数的整数版本时,如下所示:
function(4);
function(28l);
它仍然可以正常工作(我收到消息“T 是整数类型”)。但是,当我为浮点类型添加另一个实例时:
function(4);
function(28l);
function(4.5f);
我收到错误消息,没有匹配的函数可以调用“function(float)”。这个 sn-p 代码有什么问题?顺便说一句,If 模板类只是 enable_if 的别名。
【问题讨论】: